std :: map和-fno-implicit-templates

时间:2010-08-09 13:12:45

标签: c++ stl instantiation stdmap

我正在尝试使用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 。为什么呢?

在此先感谢,任何提示都将受到赞赏。

1 个答案:

答案 0 :(得分:7)

地图在其实现中使用红黑树,因此您必须显式实例化地图实例化所需的树类型。这看起来不是一个特别有用的编译器标志,恕我直言。