Estoy tratando de compilar con g ++ 4.4 y vincular un programa simple que usa el STL. Estoy intentando hacerlo usando -fno-implicit-templates, por lo que todas las plantillas deben crearse instancias explícitamente.std :: map and -fno-implicit-templates
No entiendo por qué funciona este código:
#include <map>
//template class std::map<char,char>;
template class std::_Rb_tree<char, std::pair <char const, char>,
std::_Select1st<std::pair<char const, char> >,
std::less<char>, std::allocator<std::pair<char const, char> > >;
int main() {
std::map <char,char> table;
return 0;
}
yo esperaría que este programa necesita la línea: template class std::map<char,char>;
, sin embargo, que la línea no hace que el vínculo del programa. Se necesita std::_Rb_tree line
. ¿Por qué?
Gracias de antemano, cualquier pista será apreciada.
Estoy de acuerdo con Neil: el problema de este indicador es que necesita crear una instancia explícita de cada componente de la clase, lo que lo expone a cada detalle de la implementación ... URK. Tienes suerte de comenzar con el STL, que es bastante simple, pruébalo con una gran biblioteca de impulso y llorarás todas las lágrimas de tu cuerpo antes de que tengas éxito compilando. –
+1 Un nombre de la bandera más honesto sería --you-have-elect-the-way-of-pain –
@chrispy: sería aún mejor si el compilador lo leyó en la voz de Christopher Lee. – Peter