Сопоставление параметров шаблона шаблона с аргументами по умолчанию - PullRequest
0 голосов
/ 22 сентября 2018

Этот вопрос относится к этому и должен быть с конкретными случаями ниже

template<class T, class U = T> class B { };
template <class ... Types> class C {  };
template<template<class> class P> class X { };

X<B>{ }; // OK
X<C>{ }; // OK

Стандарт в [temp.arg.template]/3 пометил эти два случая как ОК, но последнийВ обновлении дефекта CWG 150 говорится, что CWG решил пока не предпринимать никаких действий.Ни clang, ни gcc не принимают код.

Являются ли clang и gcc несовместимыми?

1 Ответ

0 голосов
/ 22 сентября 2018

GCC принимает это с 7.1.clang преднамеренно не принимает его, если вы не укажете новый флаг:

Несмотря на то, что это разрешение для отчета о дефектах, эта функция по умолчанию отключена во всех языковых версиях и можетбыть включен явно с флагом -frelaxed-template-template-args в Clang 4 и далее.Изменение в стандарте не содержит соответствующего изменения для частичного упорядочения шаблона, что приводит к ошибкам неоднозначности для разумного и ранее действительного кода.Ожидается, что эта проблема будет исправлена ​​в ближайшее время.

Примеры указанного кода взлома см. В этом вопросе .

Демонстрация компиляции .

Также последнее обновление основной проблемы, о которой идет речь, заключается в том, что оно было:

[перенесено в DR на совещании в ноябре 2016 года в виде бумаги P0522R0 .]

Это просто вверху вопроса, а не внизу.Я добавил ссылку.

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