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

时间:2011-11-11 17:33:45

标签: c++ c++11 variadic-templates

最近,在gcc-trunk中实现了“用户定义的文字”。 请告诉我,我是否理解我无法为可变参数字符模板定义“用户定义的文字”?

template<char... chars>
int operator"" _call() { return sizeof...(chars); }
...
std::cout << "method"_call;

向上。

我不明白为什么允许这个表达式:

template<char... chars>
int operator"" _call() { return sizeof...(chars); }
...
std::cout << 12345566_call;

这个是不允许的:

template<char... chars>
int operator"" _call() { return sizeof...(chars); }
...
std::cout << method_call;

有什么意义?

向上。 这是因为含糊不清?

感谢。

2 个答案:

答案 0 :(得分:8)

不,它没有意义。字符串文字作为两个参数传递给operator"",其中一个是大小,所以你想要的是:

size_t operator"" _call(const char*, size_t len) {
    return len;
}

标准报价时间(2.14.8.5):

  

5如果L是 user-de fi ned-string-literal ,那么让 str 成为没有 ud-suffix 的文字并让< em> len 是 str 中的代码单元数(即,其长度不包括终止空字符)。文字L被视为形式的调用

operator "" X (str, len)

可变参数模板表单仅适用于 user-de fi ned-integer-literal (2.14.8.3)和 user-de fi ned-floating-literal (2.14.8.4)

至于method_callmethod不是文字。

答案 1 :(得分:1)

method_call是有效的标识符,例如some_callmy_call。现在想象一下,如果operator""允许重新定义这些标识符,将会破坏多少代码。