如果没有,g++将不会编译此代码-fpermssive
。clang 和 icc 都没有抱怨。这段代码合法吗?
我的意图是声明wrapped_foo
并在单独的编译单元中定义它。那可能吗?
错误1.cpp
\n\nauto wrap(int (*f)(int)){\n return [f](int i) {\n return f(i);\n };\n}\n\nint foo(int);\nextern decltype(wrap(foo)) wrapped_foo;\n\nint func(){\n return wrapped_foo(2);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n\n花园 -m gcc/7.3.0-01c7/bin g++ -Wall -Wextra bug1.cpp -c\nbug1.cpp:8:28: 错误: \xe2\x80\x98wrap(int (*)(int)) ::<lambda(int)>wrapped_foo\xe2\x80\x99,使用本地类型 \xe2\x80\x98wrap(int (*)(int))::<lambda(int)>\xe2\x80\x99 声明,已使用但从未定义 [-fpermissive]\n extern decltype(wrap(foo))wrapped_foo;\n ^~~~~~~~~~~\n\n