このようなことをすることは可能ですか?
template <typename T, typename Comparator = std::less<typename T::Key>>
struct Container
{
std::map<typename T::Key, T*, Comparator> m;
};
これが問題の部分です。typename Comparator = std::less<typename T::Key>
つまり、コンパレータの特殊化に使用されるTの実装内にtypedefがあります。コンパレータが使用するもの(T :: Key)をテンプレートへの明示的なパラメータとして指定する必要が常にありますか?
Tクラスを変更することでこれを回避する方法は他にもあると思います(たとえば、明示的なT :: compareKeyメソッドが必要です)が、問題は、テンプレート構文を使用してこのようなことを実現できるかどうかです。