何らかの型Tがあって、その型は組み込み型か組み込み型への変換演算子を持っていると期待出来る。
最終的には型をlong, unsigned long, doubleのいずれかに変換したい。
というときに、型Tを最も適当に変換出来る型を取得するにはどうしたらいいだろうか?

template<typename T>
struct ConvertResult { typedef ??? type; };
template<typename T>
typename ConvertResult<T>::type convert(T t);

struct X { operator int(); }; // intへ変換可能

long n = convert(X()); // longになって欲しい