コンパイラがこのコードのみを受け入れる理由を誰かが説明できますか
template<typename L, size_t offset, typename enable_if< (offset<sizeof(L)), int >::type =0>
void a_function(){}
template<typename L, size_t offset, typename enable_if< (offset==sizeof(L)), int >::type =0>
void a_function(){}
しかし、これではありません:
template<typename L, size_t offset, typename enable_if< (offset<sizeof(L)), int >::type =0>
class a_class{};
template<typename L, size_t offset, typename enable_if< (offset==sizeof(L)), int >::type =0>
class a_class{};
コンパイラーは、2番目のクラスのテンプレートを最初のクラスのテンプレートの再定義と見なします。