我正在尝试使用g ++ 4.4编译并链接一个使用STL的简单程序。 我正在尝试使用 -fno-implicit-templates 来完成它,因此必须明确地实例化所有模板。
我不明白为什么此代码有效:
#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;
}
我希望此程序需要以下行: template class std::map<char,char>;
,但该行不会使程序链接。需要 std::_Rb_tree line
。为什么呢?
在此先感谢,任何提示都将受到赞赏。
答案 0 :(得分:7)
地图在其实现中使用红黑树,因此您必须显式实例化地图实例化所需的树类型。这看起来不是一个特别有用的编译器标志,恕我直言。