C ++ переменные шаблоны и аргументы шаблона шаблона: ошибка: несоответствие типа / значения в аргументе 1 в списке параметров шаблона - PullRequest
0 голосов
/ 19 января 2019

Я получаю ошибку: несоответствие типа / значения в аргументе 1 в списке параметров шаблона ... при компиляции следующего кода.Компилятор gcc версии 8.2.0.

template<typename>
struct t1 {};

template<typename ...>
struct t2 {};

template<typename, typename ...>
struct t3 {};

template<template<typename> class>
struct tt1 {};

template<template<typename ...> class>
struct tt2{};

template<template<typename, typename ...> class>
struct tt3{};


tt1<t2> _1; // error
tt1<t3> _2; // error
tt2<t1> _3;
tt2<t3> _4;
tt3<t1> _5;
tt3<t2> _6; // error

Вопрос : почему _3 , _4 , _5 разрешены и _1 , _2 , _6 неверны?

1 Ответ

0 голосов
/ 19 января 2019

Эти ошибки являются ошибками до C ++ 17. До C ++ 17 аргумент / параметр шаблона шаблона должен точно соответствовать.

Но поскольку к стандарту добавлено P0522R0 , правило менее строгое, и этот код компилируется.

На сегодняшний день, я думаю, что только GCC реализует его, и вам нужно указать стандарт: gcc -std=c++17 см. Здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...