Я написал небольшую библиотеку, которая использует много методов метапрограммирования С++ 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, вы думаете, что он будет решен в будущей версии?