jeudi 26 mars 2015

What means "obey ODR" in case of inline and constexpr function?

I just read that constexpr and inline functions obey one-definition rule, but they definition must be identical. So I try it:



inline void foo() {
return;
}

inline void foo() {
return;
}

int main() {
foo();
};


error: redefinition of 'void foo()',

and



constexpr int foo() {
return 1;
}

constexpr int foo() {
return 1;
}

int main() {
constexpr x = foo();
};


error: redefinition of 'constexpr int foo()'


So what exactly means that, constexpr and inline function can obey ODR?


Aucun commentaire:

Enregistrer un commentaire