如何定义模板类专业化的静态constexpr数组成员
How do I define a static constexpr array member of a template class specialisation
我试图在模板专用类中使用静态constexpr数组,如下所示:
///////////////////////////////////////////////////////////////////////////
struct good {
static constexpr int values[1] = { 0 };
};
constexpr int good::values[1];
///////////////////////////////////////////////////////////////////////////
template <typename T>
struct bad;
template <>
struct bad<int> {
static constexpr int values[1] = { 0 };
};
constexpr int bad<int>::values[1];
///////////////////////////////////////////////////////////////////////////
int
main (int argc, char **argv)
{
#if 1
return good::values[0];
#else
return bad<int>::values[0];
#endif
}
我知道要求声明和定义静态成员的要求,并且上面的"好"情况似乎在GCC-6.2.0和Clang-3.9.0中成功使用-std = C 1Z。<<<<<<
然而,"不良"案例导致clang-3.9.0下的未定义参考,给出以下输出:
danny@steve ~/src $ clang++ -std=c++1z scratch.cpp
/tmp/scratch-56fa44.o: In function `main':
scratch.cpp:(.text+0x15): undefined reference to `bad<int>::values'
clang-3.9: error: linker command failed with exit code 1 (use -v to see invocation)
我需要做其他事情,还是我缺少的是实例化静态constexpr成员?修改以使用静态常量成员时,该代码似乎正常工作。
如果使用-STD = C 1Y。
我需要做其他事情,还是我缺少的是实例化静态
constexpr
成员?
该代码看起来很好,但是它确实无法在Clang中链接到5.0.2版,但是在Clang 6.0中已完全接受。演示:https://gcc.godbolt.org/z/ka7w4bbqf
这表明它只是一个编译器错误。
相关文章:
- 如何使用默认参数等选择模板专业化
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 模板化建造师专业化
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 基于boost的程序的静态链接——zlib问题
- 在静态库中嵌入类方法
- 类模板的成员功能的定义在单独的TU中完全专业化
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 如何在C++中获得"静态纯虚拟"功能?
- 私有类型的静态常量成员
- 在模板专业化期间,如何设置C 结构中的静态字段
- 如何定义模板类专业化的静态constexpr数组成员
- 我可以只为特定的专业化定义静态constexpr数据成员吗
- 模板专业化和静态区域设置
- 具有静态绑定成员函数指针的可变模板的多个专业化