Можно ли привязать объект типа класса к ссылке через параметр шаблона, не относящийся к типу, в C++20? ⇐ C++
-
Anonymous
Можно ли привязать объект типа класса к ссылке через параметр шаблона, не относящийся к типу, в C++20?
Рассмотрим следующий код:
оболочка структуры { int& ссылка; оболочка constexpr(int& ref): ref(ref) {} }; шаблон недействительный fun1() {} шаблон недействительный fun2() { fun1(); } интервал основной() { статический интервал val = 22; fun2(); } fun2() принимает класс в качестве параметра шаблона, не являющегося типом, а fun1() принимает ссылку на пересылку на любой объект, передаваемый в это.
Вышеуказанное не может скомпилироваться в GCC с ошибкой, показанной ниже, но прекрасно компилируется в Clang.
:11:12: ошибка: адрес «wrapper{val}» не является допустимым аргументом шаблона. 11 | fun1(); | ~~~~~~~^~ Какой компилятор здесь прав? Предполагается ли это ошибка в любом из двух компиляторов?
Я пытался изменить template на template , но безуспешно, так как это не помогло как в GCC, так и в Clang.
р>
Рассмотрим следующий код:
оболочка структуры { int& ссылка; оболочка constexpr(int& ref): ref(ref) {} }; шаблон недействительный fun1() {} шаблон недействительный fun2() { fun1(); } интервал основной() { статический интервал val = 22; fun2(); } fun2() принимает класс в качестве параметра шаблона, не являющегося типом, а fun1() принимает ссылку на пересылку на любой объект, передаваемый в это.
Вышеуказанное не может скомпилироваться в GCC с ошибкой, показанной ниже, но прекрасно компилируется в Clang.
:11:12: ошибка: адрес «wrapper{val}» не является допустимым аргументом шаблона. 11 | fun1(); | ~~~~~~~^~ Какой компилятор здесь прав? Предполагается ли это ошибка в любом из двух компиляторов?
Я пытался изменить template на template , но безуспешно, так как это не помогло как в GCC, так и в Clang.
р>
Мобильная версия