部分特殊化ができないのであって、全部指定してやればできるのか!!
関数テンプレートは特殊化できないとずっと勘違いしていた。あぁ、恥ずかしい。
template<typename result_t, typename arg_t> result_t hogehoge_cast(arg_t arg); enum Foo { Foo1, Foo2, Foo3 }; enum Bar { Bar1, Bar2, Bar3 }; // 特殊化 … OK template<> Foo hogehoge_cast<Foo, Bar>(Bar bar) { return static_cast<Foo>(bar); } // 特殊化 … OK template<> Bar hogehoge_cast<Bar, Foo>(Foo foo) { return static_cast<Bar>(foo); } // 部分特殊化 … NG template<typename T> Bar hogehoge_cast<Bar, T>(T value) { return static_cast<Bar>(value); }