GCC v6.1 (il risultato è lo stesso con v5.1) compilato correttamente il codice qui sotto con bandiere -std=c++11 -Wall -Wextra -Wpedantic
, ma produce questo avvertimento:Perché la compilazione con C++ 11 ha successo nonostante si usi la funzionalità C++ 14?
variable templates only available with -std=c++14 or -std=gnu++14
Il codice:
#include <iostream>
template <typename T>
struct ParamMetadata {
T min;
T max;
};
template <class T1, class T2>
class FooMap {};
template <typename T>
// WARNING PRODUCED ON THIS LINE
extern FooMap<int, ParamMetadata<T> > metadataHashmap;
int main() {
return 0;
}
Clang v3 0,8 produce un avviso simile:
variable templates are a C++14 extension [-Wc++14-extensions]
Se questa è una caratteristica disponibile solo in C++ 14, perché lo fa compilato con C++ 11 bandiera proprio bene e I C eseguire l'eseguibile? Non dovrebbe essere un errore fatale?
Utilizzare '-pedantic-errors' per un errore –
@PiotrSkotnicki Sure, ma come può il programma essere compilato ed eseguito senza la funzionalità richiesta? – DBedrenko
Perché pensi che funzioni senza la funzione richiesta? –