Почему C++ не позволяет ограничивать переопределения виртуальных функций с помощью предложения Concept/Requires?C++

Программы на C++. Форум разработчиков
Anonymous
Почему C++ не позволяет ограничивать переопределения виртуальных функций с помощью предложения Concept/Requires?

Сообщение Anonymous »

Я попытался написать следующий код, но он был отклонен компилятором:
#include
struct Base {
virtual void f() {}
};

template
struct Derived : Base {
void f() requires std::is_same_v override {}
};

Соответствующий раздел стандарта я нашел здесь:
11.7.3 Virtual functions
6 A virtual function shall not have a trailing requires-clause ([dcl.decl]).
[Example 5:
template
struct A {
virtual void f() requires true; // error: virtual function cannot be constrained ([temp.constr.decl])
};
— end example]

но я не понимаю мотивации этого. Учитывая, что для производного класса совершенно разумно не переопределять виртуальную функцию базового класса, почему не считается правильным решить, существует ли это переопределение на основе ограничения (время компиляции)?
Изменить
Это ограничение кажется особенно глупым (по крайней мере, в этом примере), поскольку этот код является законным и, по сути, достигает того же самого, но более подробно:
template
struct Derived : Base {
};

template
requires std::is_same_v
struct Derived : Base {
void f() override {}
};


Подробнее здесь: https://stackoverflow.com/questions/798 ... -a-concept

Вернуться в «C++»