g ++ не скомпилирует этот код без -fpermssive
.Ни лязг, ни icc не жалуются.Является ли этот код законным?
Мое намерение состоит в том, чтобы объявить wrapped_foo
в одном модуле компиляции и определить его в отдельном модуле компиляции.Это возможно?
bug1.cpp
auto wrap(int (*f)(int)){
return [f](int i) {
return f(i);
};
}
int foo(int);
extern decltype(wrap(foo)) wrapped_foo;
int func(){
return wrapped_foo(2);
}
garden with -m gcc/7.3.0-01c7/bin g++ -Wall -Wextra bug1.cpp -c
bug1.cpp:8:28: error: ‘wrap(int (*)(int))::<lambda(int)> wrapped_foo’, declared using local type ‘wrap(int (*)(int))::<lambda(int)>’, is used but never defined [-fpermissive]
extern decltype(wrap(foo)) wrapped_foo;
^~~~~~~~~~~