多くの C++11 メタプログラミング手法と CRTP を使用する小さなライブラリを作成しました。これは g++ 4.7.2 で適切にコンパイルされます。
今、Intel icpc 13.0.0.079 でコンパイルしようとすると、数百のエラーが生成されます。それで、問題を次々と切り分けようとします。
したがって、最初に、g++ 4.7.2 で問題なくコンパイルされるこのコードを検討してください。
#include <iostream>
template<template<typename> class Crtp, typename Type>
struct Base {};
template<typename Type>
struct Derived : public Base<Derived, Type>
{
Derived(): Base<Derived, Type>() {;}
};
int main()
{
Derived<int> x;
return 0;
}
icpc と clang の両方がこのコードのコンパイルに失敗します:
test_crtp.cpp(26): error: type "Derived<Type>::Derived" is not a class template
Derived(): Base<Derived, Type>() {;}
^
test_crtp.cpp(26): error: "Base" is not a nonstatic data member or base class of class "Derived<int>"
Derived(): Base<Derived, Type>() {;}
^
detected during instantiation of "Derived<Type>::Derived() [with Type=int]" at line 31
compilation aborted for test_crtp.cpp (code 2)
intel と clang、または g++ のバグですか? intel と clang にある場合、将来のバージョンで解決されると思いますか?