以下代码将使用FIXME定义编译,但不是没有。有问题的编译器是visual studio 2013。
#include <functional>
#ifdef FIXME
namespace unrelated_namespace {
struct ned {};
}
#endif
namespace something {
struct do_something {
template <typename T>
do_something(T f) {}
};
}
using namespace something;
do_something my_something([](){
std::function<void(void)> inner([]{});
});
#ifndef FIXME
namespace unrelated_namespace {
struct ned {};
}
#endif
错误如下:
Error 2 error C2888: '<lambda_22ffa30be171afdd76e6bc1bf85e9dd7>::()::<lambda_cac50c1ea5c52e062ca61c564ead686c>' :
symbol cannot be defined within namespace 'unrelated_namespace'
C:\hudson\workspace\phtest_build_windows\replication_dev\kernel\foe\test\serialize_unit.cpp 20 1 foe
Error 3 error C2888: '<lambda_22ffa30be171afdd76e6bc1bf85e9dd7>::<helper_func_cdecl>::<lambda_8c92b136dc3e83c8e0db25c06e4203d5>' :
symbol cannot be defined within namespace 'unrelated_namespace'
C:\hudson\workspace\phtest_build_windows\replication_dev\kernel\foe\test\serialize_unit.cpp 20 1 foe
Error 3 error C2888: '<lambda_22ffa30be171afdd76e6bc1bf85e9dd7>::<helper_func_cdecl>::<lambda_8c92b136dc3e83c8e0db25c06e4203d5>' :
symbol cannot be defined within namespace 'unrelated_namespace'
C:\hudson\workspace\phtest_build_windows\replication_dev\kernel\foe\test\serialize_unit.cpp 20 1 foe
G ++无需投诉即可吃掉代码(例如http://ideone.com/ZEPYE7)。
除了编译器错误之外,是否有这种行为的解释?