Почему невозможно отменить указатель функции членов, который невозможно отменить указатель функции, квалифицированного ч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
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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