Почему невозможно отменить указатель функции членов, который невозможно отменить указатель функции, квалифицированного чC++

Программы на C++. Форум разработчиков
Anonymous
Почему невозможно отменить указатель функции членов, который невозможно отменить указатель функции, квалифицированного ч

Сообщение Anonymous »

Этот код отклоняется всеми компиляторами, на которых я мог бы его проверить, поэтому я полагаю, что он плохо образуется в соответствии со стандартом.

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

struct X {
void f();
};

void (X::*fptr)() & = &X::f; // ERROR
Здесь мы пытаемся отменить указатель квалифицированной функции члена (то есть указатель, который можно призвать либо с помощью указателя LVALUE или RVALUE) на указатель функции, квалифицированного членом (то есть указатель, который может быть вызван только с помощью ссылки LVALUE). Другими словами, здесь мы пытаемся разыграть тип с более слабыми ограничениями на тип с более сильными ограничениями. с потерей noExcept квалификации (которые также были введены в C ++ 11), компилированные данные:
struct X {
void f() noexcept;
};

void (X::*fptr)() = &X::f; // OK
< /code>
Это ограничение было намеренным? Если это было, каковы были причины навязывать их?


Подробнее здесь: https://stackoverflow.com/questions/797 ... o-a-ref-qu

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