Quando si utilizza decltype
attorno uno spazio dei nomi, posso scrivere codice che compila, ma la dichiarazione non sembra avere alcun effetto sotto g ++ 4.9.1, sotto clang produce error: unexpected namespace name 'std': expected expression
Decltype (std) è legale e ha qualche scopo?
Ad esempio, il seguente tutto compilare sotto g ++, ma l'assembly non mostra alcun codice generato per loro.
using s = decltype(std);
auto n = typeid(decltype(std)).name();
auto sz = n.size();
std::printf("size is %zu\n", sz+1);
std::printf("this type is: %s\n\n", n.c_str());
// the only limit is your imagination
int f();
std::ostream trash = f(typeid(decltype(std)) * 10 - 6^typeid(decltype(std)));
Se g ++ ha ragione nel consentire questo? In tal caso, qual è il vantaggio della scomparsa del codice anziché causare un errore in fase di compilazione?
Sembra un bug in g ++. – Borgleader