namespace ct_parser {
namespace variadic {
template <char... Cs>
struct static_array<char, Cs...>
{
static const char value[sizeof...(Cs)];
static constexpr char val[sizeof...(Cs)] = { Cs... };
};
template <char... Cs>
const char static_array<char, Cs...>::value[sizeof...(Cs)] = { Cs... };
稍后...
const char * buf3 = ct_parser::variadic::static_array<char, 'a', 'b'>::value; // OK
const char * buf4 = ct_parser::variadic::static_array<char, 'a', 'b'>::val; // NOT OK
任何人都可以向我解释为什么调用buf3
会很好地进行编译,但是一旦调用buf4
就会产生编译错误,即:
Undefined reference to ct_parser::variadic::static_array<char, char(97), char(98)>::val
((我利用模板专门化,因此不必将类型char
强制转换为自身。
编辑:如果使用支持C ++ 17的编译器,则将静态成员val
声明为inline
可解决此问题。