Я обнаружил, что приведенный ниже минимальный пример работает с gcc, clang и даже с Visual Studio, но не компилируется с icc. Я пытаюсь определить, является ли это действительным С++, но я не могу найти соответствующие части стандарта, которые отвечают на мой вопрос, поскольку это несколько разных концепций.
// struct with multiple template parameters
template<typename A, typename B = int>
struct C
{
};
// struct that tries to use C's default second parameter without specifying it
template<typename D, template<typename E, typename ...> class F>
struct G
{
F<D> h;
};
int main()
{
G<char, C> i;
}
С icc (16.0.3) компиляция выдает следующую ошибку:
struct.cpp(12): error: too few arguments for template template parameter "F"
F<D> h;
detected during instantiation of class "G<D, F> [with D=char, F=C]" at line 17
Это действительный С++?
Мне кажется, что так и должно быть, потому что C
имеет значение по умолчанию для второго параметра шаблона, а это означает, что F<D>
с F = C
должны быть допустимой конструкцией.