最近,在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;
有什么意义?
向上。 这是因为含糊不清?
感谢。
答案 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_call
,method
不是文字。
答案 1 :(得分:1)
method_call
是有效的标识符,例如some_call
或my_call
。现在想象一下,如果operator""
允许重新定义这些标识符,将会破坏多少代码。