编译 MySQL c-std=c++20
时出现以下错误:error: expected unqualified-id before ')' token。
有问题的代码部分:
template<std::size_t N>
class Bitmap { ... };
template<>
class Bitmap<64>
{
public:
Bitmap<64>() { ... };
//........^
};
由于模板类的完全特化的声明与普通类的声明相同,因此还必须使用通常的语法来声明模板类的特化的成员函数:
template<>
class Bitmap<64>
{
public:
Bitmap() { ... };
};
不幸的是,我在标准中找不到对上述内容的“直接”确认(或反驳),所以我请求您的帮助。
我试过用 GCC 和 Clang 编译这段代码。后者不会在 C++17 或 C++20 中引发错误。带有 C++17 的 GCC 也可以无错误地构建代码。有趣的是,将代码更改为:
template<>
class Bitmap
{
public:
explicit Bitmap<64>() { ... };
};
导致 GCC 即使使用-std=c++20
. 这看起来已经像是编译器中的一个错误。