c++ - Problem with templates at link time
- CP <c_paternotte hotmail.com> Jun 30 2009
Hello folks,
DMC (latest) seems unable to compile the code below.
The output is:
dmc -I\dm\stlport\stlport test.cpp
link test,,,user32+kernel32/noi;
OPTLINK (R) for Win32 Release 8.00.1
Copyright (C) Digital Mars 1989-2004 All rights reserved.
test.obj(test)
Error 42: Symbol Undefined ?_M_copy ?$_Rb_tree std PAH0U?
$_Identity std PAH 1 U?$less std PAH 1 V?
$allocator std PAH 1 std AAEPAU?$_Rb_tree_node std PAH 2 PAU32 0 Z
test.obj(test)
Error 42: Symbol Undefined ?_M_erase ?$_Rb_tree std PAH0U?
$_Identity std PAH 1 U?$less std PAH 1 V?
$allocator std PAH 1 std AAEXPAU?$_Rb_tree_node std PAH 2 Z
test.obj(test)
Error 42: Symbol Undefined ?insert_unique ?$_Rb_tree std PAH0U?
$_Identity std PAH 1 U?$less std PAH 1 V?
$allocator std PAH 1 std QAE?AU?$pair std U?
$_Rb_tree_iterator std PAHU?
$_Nonconst_traits std PAH 1 1 _N 2 ABQAH Z
Adding the -XD option doesn't help.
However, it compiles when moving the "Container<int>::insert" method
call in the main block (see commented line in main block).
Any ideas ?
Regards,
Cedric P.
--- cut ---
#include <set>
template<class T>
class Container
{
public:
typedef std::set<T*> SetType;
static SetType getSet()
{
static SetType mySet;
return mySet;
}
static int insert( T *x )
{
getSet().insert(x);
return 0;
}
};
const static int x = Container<int>::insert( new int(1) );
int main()
{
//Container<int>::insert( new int(2) );
}
--- cut ---
Jun 30 2009








CP <c_paternotte hotmail.com>