GCC 4.7.2似乎只有为数字实现的variadic-char-templated文字运算符:
template<char... chars>
constexpr size_t operator "" _size() { return sizeof...(chars); }
int main()
{
std::cout << 42_size; // (1) works
std::cout << "foo"_size; // (2) does not
}
答案 0 :(得分:3)
2.14.8.5的C ++ 11标准声明
如果L是用户定义的字符串文字,则让str为文字而不是 它的ud-suffix和len是str中代码单元的数量(即 它的长度不包括终止空字符)。文字L是 被视为形式运算符“”X(str,len)的调用
所以重写你的代码:
#include <iostream>
// (1)
template<char... chars>
constexpr size_t operator "" _size() { return sizeof...(chars); }
// (2)
constexpr size_t operator "" _size( const char* str, size_t sz ) { return sz; }
int
main(void)
{
std::cout << 42_size << std::endl; // (1)
std::cout << "foo"_size << std::endl; // (2)
return 0;
}
明确指定(2)
的正确形式