2

GCC 4.7.2 似乎只有为数字实现的可变字符模板文字运算符:

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) 甚至是标准的一部分吗?
4

1 回答 1

3

C++11 标准的 2.14.8.5 声明

如果 L 是用户定义字符串文字,则令 str 为不带 ud 后缀的文字,令 len 为 str 中的代码单元数(即,其长度不包括终止空字符)。文字 L 被视为对形式 operator "" 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) 明确指定正确的形式

于 2013-01-30T10:10:24.510 回答