Я хотел бы спросить, должен ли компилироваться следующий образец кода:
#include <iostream>
#include <vector>
#include <typeinfo>
using namespace std;
template <template <class...> class C>
struct convert_container
{
using type = C<double>;
// Visual Studio requires this to be:
// using type = C<double, std::allocator<doble>>
};
int main()
{
std::cout << typeid(convert_container<std::vector>::type).name();
}
Код компилируется с GCC 4.8.1 и Clang 3.4, но не с Visual Studio 2013. Ошибка, которую я получаю:
error C2976: 'std::vector' : too few template arguments
c:\program files (x86)\microsoft visual studio 12.0\vc\include\vector(650) : see declaration of 'std::vector'
c:\users\michał\documents\visual studio 2013\projects\transform\transform.cpp(14) : see reference to class template instantiation 'convert_container<std::vector>' being compiled
Что говорит об этом стандарт? Мне нужно явно указывать все параметры (включая дефолтные) при использовании параметра шаблона шаблона C
или это просто ошибка в VС++?
Контекст: проблема, вызванная конструктором, отвечает на мой предыдущий вопрос: qaru.site/info/144397/...
При поиске в архивах я нашел этот вопрос: Значения по умолчанию в шаблонах с аргументами шаблона (С++) В основном по той же проблеме автор вопроса утверждает, что параметры по умолчанию для параметра шаблона шаблона "должны быть" явно указаны. Однако, искатель принял решение, которое не совсем применимо в моем случае. Вопрос не в том, что такое стандартно-совместимое поведение, поэтому я считаю, что это не дубликат.