"符号不能在&unrelated_namespace'"中定义。 - lambda嵌套在lambda-passed-as-argument中

时间:2014-09-19 14:46:09

标签: c++ c++11 lambda visual-studio-2013 namespaces

以下代码将使用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)。

除了编译器错误之外,是否有这种行为的解释?

0 个答案:

没有答案