Ich habe 4 Testfälle und ich glaube, dass alle von ihnen gelten:constexpr mit unangetastet nicht-constexpr Argumente: Wer richtig, Klappern oder gcc ist?
constexpr int f(int const& /*unused*/){
return 1;
}
void g(int const& p){
constexpr int a = f(p); // clang error, gcc valid
int v = 0;
constexpr int b = f(v); // clang valid, gcc valid
int const& r = v;
constexpr int c = f(r); // clang error, gcc error
int n = p;
constexpr int d = f(n); // clang valid, gcc valid
}
int main(){
int p = 0;
g(p);
}
Clang und GCC nur im ersten Testfall abweichen.
Ich testete mit clang 4 & 5 (20170319) und mit GCC 7.0.1 (20170221).
Wenn ich Recht habe wäre es massiv die Verwendung von boost :: hana in static_assert des vereinfachen.