在此代码段中:
template <size_t N>
struct Foo {
static constexpr std::array<char, N> arr{{0}};
static const char *data() { return &arr[0]; }
};
template<>
constexpr std::array<char, 5> Foo<5>::arr;
int main()
{
std::cout << Foo<5>::data() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
使用gcc 5.2我得到了未定义的引用Foo<5ul>::arr,而clang 3.7给出了编译时错误:
Constexpr静态数据成员'arr'的声明需要初始化程序
有什么不对,怎么static constexpr在课堂宣言之外定义?
外联定义与其他静态(非整数)成员相同,减去初始化:
template<size_t N>
constexpr std::array<char, N> Foo<N>::arr;
Run Code Online (Sandbox Code Playgroud)
像其他静态成员一样,它位于标题中 - 就像类模板本身一样.
| 归档时间: |
|
| 查看次数: |
3101 次 |
| 最近记录: |