Is there any way to make a complete copy of a type so that they can be distinguished in template deduction context? Take the example:
template <typename T>
static int c()
static int t = 0;
typedef int handle;
std::cout << test<int>::c() << std::endl;
std::cout << test<handle>::c() << std::endl;
Note that neither typedef nor using create new distinct data types. They only create synonyms of existing types. That means that the type of myword above, declared with type WORD, can as well be considered of type unsigned int; it does not really matter, since both are actually referring to the same type.
handle are one and the same, the output
0 1 is expected.
There's a workaround though, as @interjay suggests.
You can use
BOOST_STRONG_TYPEDEF( int , handle );