Разрешены ли указатели на чисто виртуальные функции-члены локальных классов?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Разрешены ли указатели на чисто виртуальные функции-члены локальных классов?

Сообщение Anonymous »

Рассмотрим следующий фрагмент:

Код: Выделить всё

int main() {
struct Local {
virtual void foo() = 0;
};

void (Local::* ptr)() = &Local::foo;
}
При компиляции с помощью C++20 GCC 13.3.0 и Clang 18.1.3 компилируют этот код, но MSVC с 19.39 по 19.43 генерирует следующую ошибку компилятора:

Код: Выделить всё

(3): error C3640: 'main::Local::[thunk]: __cdecl `int __cdecl main(void)'::`2'::Local::`vcall'{0,{flat}}' }'': a referenced or virtual member function of a local class must be defined
Я не смог найти в стандарте C++20 ничего, что могло бы доказать правоту любого компилятора. Правильно ли сформирован фрагмент кода?
Пример в Compiler Explorer

Подробнее здесь: https://stackoverflow.com/questions/798 ... es-allowed
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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