我看到一些我无法解释的行为。考虑test.cpp
:
#include <iostream>
long double operator"" _N(long double a) { return a; }
int main(int argc, char** argv) {
long double t = 4.0_N;
}
颁发
g++ -std=c++11 test.cpp
给了我
test.cpp:2:22: error: expected suffix identifier
long double operator"" _N(long double V) { return V; }
^
进行以下任何更改都会不给出错误:
// #include <iostream> // Is there some conflict with something in iostream then?
long double operator"" _N(long double a) { return a; }
...
#include <iostream>
long double operator"" _P(long double a) { return a; }
// (or most other letters and/or words)
...
然而,问题仍然存在至少_B
和_C
(我没有测试整个字母表)...
我在这里缺少什么?
更多信息:
$ g++ --version
g++ (GCC) 4.8.2
在64位Windows 7 SP1上运行CygWin。
答案 0 :(得分:2)
使用您发布的预处理输出(http://pastebin.com/USSiRcGQ),我们可以立即看到问题:
long double operator "" 04(long double V) { return V; }
所以你有一些头文件(相当于):
#define _N 04
知道哪个标题会很有趣 - 您可以尝试grep -rw _N /usr/include
并查看它是否会弹出。
既然你知道这一点,如果你是勇敢的我猜你可以#undef _N
,但实际上你应该改为_n
这样的后缀或者更具描述性的后缀。