dimanche 25 janvier 2015

constexpr of static tuple class member has linker error

I have the following code:



#include <iostream>
#include <tuple>

class T
{
public:
using Names = std::tuple<char const*, char const*>;
static constexpr Names names {"First", "Second"};
};

int main()
{
std::cout << std::get<0>(T::names);
}


As names is a constexpr I expected this to work. But I get a linker error:


The compiler:



> g++ --version
Configured with: --prefix=/Applications/http://ift.tt/1d5DwEL --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.0.0
Thread model: posix


The error:



> g++ -std=c++1y pl.cpp
Undefined symbols for architecture x86_64:
"T::names", referenced from:
_main in pl-377031.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)


[live demo]


Aucun commentaire:

Enregistrer un commentaire