Видна ли статическая функция-член внутри шаблонного класса до ее объявления? ⇐ C++
-
Anonymous
Видна ли статическая функция-член внутри шаблонного класса до ее объявления?
Должна ли статическая функция-член b быть видимой в предложении require конструктора по умолчанию s? Что говорит стандарт C++20 о законности приведенного примера?
шаблон структура s { s() требует (s::b()) = default; // лязг нет, gcc ок, msvc ок статический constexpr bool b() { вернуть истину; } }; static_assert((s{}, true)); Живой пример
Сообщение об ошибке от Clang:
:3:22: ошибка: в 's' нет элемента с именем 'b' 3 | s() требует (s::b()) = default; | ~~~^ :7:15: ошибка: статическое выражение утверждения не является целочисленной константой выражение 7 | static_assert((s{}, true)); | ^~~~~~~~~~~~~ :7:16: примечание: конструктор, не являющийся constexpr, нельзя использовать в константе выражение 7 | static_assert((s{}, true)); | ^ :3:5: примечание: объявлено здесь 3 | s() требует (s::b()) = default; | ^
Должна ли статическая функция-член b быть видимой в предложении require конструктора по умолчанию s? Что говорит стандарт C++20 о законности приведенного примера?
шаблон структура s { s() требует (s::b()) = default; // лязг нет, gcc ок, msvc ок статический constexpr bool b() { вернуть истину; } }; static_assert((s{}, true)); Живой пример
Сообщение об ошибке от Clang:
:3:22: ошибка: в 's' нет элемента с именем 'b' 3 | s() требует (s::b()) = default; | ~~~^ :7:15: ошибка: статическое выражение утверждения не является целочисленной константой выражение 7 | static_assert((s{}, true)); | ^~~~~~~~~~~~~ :7:16: примечание: конструктор, не являющийся constexpr, нельзя использовать в константе выражение 7 | static_assert((s{}, true)); | ^ :3:5: примечание: объявлено здесь 3 | s() требует (s::b()) = default; | ^
Мобильная версия