md5*_*d5i 0 c++ initialization-list constexpr c++11
以下代码无法与g ++ 4.8.2链接:
#include <map>
struct Foo
{
constexpr static int foo = 1;
};
static std::map<int, int> map {{1, Foo::foo}};
int main()
{
return Foo::foo;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
g++ -std=c++11 -o foo foo.cc
/tmp/ccZXCwiK.o: In function `__static_initialization_and_destruction_0(int, int)':
foo.cc:(.text+0x51): undefined reference to `Foo::foo'
Run Code Online (Sandbox Code Playgroud)
如果我评论出地图,事情就好了.这是一个编译器错误,还是我在标准中缺少的一些极端情况?
你忘了定义静态成员.
一旦你使用它,就需要一个完整的定义.是的,即使它有一个内联初始化器,是的,即使它被标记了constexpr.
加:
constexpr int Foo::foo;
Run Code Online (Sandbox Code Playgroud)
您的原始代码通过ideone.com和Coliru在GCC 4.8.1中为我工作,但这是在启用优化的情况下(因此在每种情况下,常量可能会被替换为符号).关闭优化后,错误可重现.
| 归档时间: |
|
| 查看次数: |
465 次 |
| 最近记录: |