VS 2013 は、次のコードで関数テンプレートを特殊化できないと言います。
struct W { };
template <class T>
typename T::result_type
f (const W & w, T && t) {
return 0;
}
/* ... */
struct V { typedef int result_type; };
W w {};
V v {};
f (w, v);
で置き換えるか、ユニバーサル参照をで置き換えtypename T::result_type
ても、文句はありません。int
T&&
T&
私の意見では、上記のコードは正しいです。これはコンパイラのバグですか、それとも何か間違っていますか?