[ create a new paste ] login | about

Link: http://codepad.org/OLhIPjed    [ raw code | output | fork ]

C++, pasted on Dec 26:
#include <boost/static_assert.hpp>

template <typename K>
class DefaultComparer
{
public:
	static bool compare(K k1, K k2)
	{ return k1 == k2; }
};

template <typename K>
class MyComparer : public DefaultComparer<K>
{
public:
	static bool compare(K k1, K k2)
	{ return k1 <= k2; }
};

template <typename K>
class InvalidComparer
{
public:
	static bool bar(K k1, K k2)
	{ return k1 != k2; }
};

template <typename K, template <typename K> class Comparer = DefaultComparer >
class AVLTree
{
	K k1, k2;
public:
	AVLTree() : k1(0), k2(0) { }
	bool foo();
};

template <typename K, template <typename K> class Comparer>
bool AVLTree<K, Comparer>::foo()
{
	return Comparer<K>::compare(k1, k2);
}

int main(int argc, char *argv[])
{
	AVLTree<int> avltree;
	AVLTree<int, MyComparer> avltree2;
	AVLTree<int, InvalidComparer> avltree3;
	
	avltree.foo();
	avltree2.foo();
	avltree3.foo(); // fails to compile
}


Output:
1
2
3
4
t.cpp: In member function 'bool AVLTree<K, Comparer>::foo() [with K = int, Comparer = InvalidComparer]':
t.cpp:52:   instantiated from here
Line 40: error: 'compare' is not a member of 'InvalidComparer<int>'
compilation terminated due to -Wfatal-errors.


Create a new paste based on this one


Comments: