In my current project I am trying to create a compile time const static instance of a structure with c++11. My code compiles and works fine in clang (Apple LLVM version 6.1.0) but it does not work with g++ (GCC) 4.8.3. GCC throws the error that the parameter was not declared 'constexpr'. Is there any way to make this work in gcc?
//Parameter.h
struct Par {
const int uniqid;
const char *name;
const char *description;
constexpr Par(int uid,const char * n,const char * d)
:uniqid(uid), name(n),description(d){}
};
class Parameters
{
const static Par PARAM_A;
...
const static Par PARAM_Z;
printParameters(std::vector<Par> parameters);
};
//Parameter.cpp
constexpr Par Parameters::PARAM_A={0,"-a","Bla a"};
...
constexpr Par Parameters::PARAM_Z={0,"-z","Bla z"};
void Parameters::printParameters(std::vector<Par> parameters){
for (size_t i = 0; i < parameters.size(); i++) {
switch (parameters[i].uniqid) {
case PARAM_A.uniqid:
std::cout << "A" << std::endl;
break;
}
}
The GCC is the following:
Parameters.cpp:11:39: error: declaration of ‘const Par Parameters::PARAM_A’ outside of class is not definition [-fpermissive]
Parameters.cpp:12:39: error: redeclaration ‘Parameters::PARAM_A’ differs in ‘constexpr’
constexpr Par Parameters::PARAM_A={...};
In file included from Parameters.cpp:2:0:
Parameters.h:190:34: note: ‘Parameters::PARAM_A’ was not declared 'constexpr' const static Par PARAM_A;
Aucun commentaire:
Enregistrer un commentaire