用户定义的文字作为可变参数模板

时间:2013-01-30 08:40:22

标签: c++ gcc c++11

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
}
  • 是否有支持此代码的GCC版本?
  • (2)甚至是标准的一部分吗?

1 个答案:

答案 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)

的正确形式