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

niX*_*man 1 c++ variadic-templates c++11

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

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

向上.

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

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

这个是不允许的:

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

重点是什么?

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

谢谢.

Cat*_*lus 8

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

size_t operator"" _call(const char*, size_t len) {
    return len;
}
Run Code Online (Sandbox Code Playgroud)

标准报价时间(2.14.8.5):

5如果L是用户定义的字符串文字,则令str为没有其ud后缀的文字,并且lenstr中的代码单元数(即,其长度不包括终止空字符).文字L被视为表格的调用

operator "" X (str, len)
Run Code Online (Sandbox Code Playgroud)

可变参数模板形式仅适用于用户定义的整数文字(2.14.8.3)和用户定义的浮动文字(2.14.8.4).

至于method_call,method不是文字.