Ok guys... I have following class
#include <functional>
template <typename TValue, typename TPred = std::less<TValue>>
class BinarySearchTree {
    struct TNode {
        TValue value;
        TNode *pLeft;
        TNode *pRight;
    };
public:
    BinarySearchTree();
    ~BinarySearchTree();
    . . .
private:
    TNode *pRoot;
     . . .
};
then in my .cpp file i defined the ctor/dtor like this:
template <typename TValue, typename TPred>
BinarySearchTree<TValue, TPred>::BinarySearchTree() : pRoot(0) {}
template <typename TValue, typename TPred>
BinarySearchTree<TValue, TPred>::~BinarySearchTree() {
    Flush(pRoot);
}
my main function:
int main() {    
    BinarySearchTree<int> obj1;
    return 0;
}
and i get following linkage error:
public: __thiscall BinarySearchTree<int,struct std::less<int>>::BinarySearchTree<int,struct std::less<int> >(void)
i tried to put the constructor definition into the header file and i get no error. only if i try to define it in the cpp file.
 
     
    