私が扱っている複雑なテンプレート コードの最小限の下に貼り付けました。
1 template <typename T>
2 class Base
3 : public T
4 {
5 public:
6 template <typename W, W& (T::ToImpl::*Func)()>
7 bool Foo();
8 };
9
10 template <typename T>
11 template <typename W, W& (T::ToImpl::*Func)()>
12 bool Base<T>::Foo()
13 {}
14
15 int
16 main()
17 {
18 return 0;
19 }
コードは非常に簡単なので、何も説明しません。このコードを Visual Studio 2013 (別名 VC++12) でコンパイルできません。次のエラーが発生します。
main.cc(13): error C2244: 'Base<T>::Foo' : unable to match function definition to an existing declaration
definition
'bool Base<T>::Foo(W)'
existing declarations
'bool Base<T>::Foo(W)'
好奇心から、上記のコードを g++ (4.4.7) でコンパイルしてみましたが、問題なくコンパイルされました。
コードがWindowsでコンパイルに失敗する理由について、誰かが説明を提供していただければ幸いです。修正はさらに甘いでしょう。:)