Информация об изменениях

Сообщение Re[7]: enum class and if expression от 18.12.2019 14:27

Изменено 18.12.2019 14:30 rg45

Re[7]: enum class and if expression
Здравствуйте, удусекшл, Вы писали:


R>>Ну это было еще в пору C++03, когда еще не было explicit operator bool.

У>В смысле? Для операторов приведения нельзя было explicit указать?

Нет конечно Это фишка C++11.

R>>И void* — это была самая ранняя версия, потом начали выбирать типы посложнее — разнообразные указатели на функции-члены.

У>А можно поподробнее? А то я что-то пропустил этот момент

Ну эскизно так:

class Foo
{
    typedef bool (*UnspecifiedBool)() const;
public:
    bool empty() const;
    operator UnspecifiedBool() const { !empty() ? &Foo::empty : 0; }
};


А были еще такие маньяки (типа меня), которые специально для этих целей вводили фейковые функции, в списке формальных параметров присутствовали типы, определенные в закрытой секции класса — чтоб уж точно таким указателем невозможно было воспользоваться
Re[7]: enum class and if expression
Здравствуйте, удусекшл, Вы писали:


R>>Ну это было еще в пору C++03, когда еще не было explicit operator bool.

У>В смысле? Для операторов приведения нельзя было explicit указать?

Нет конечно Это фишка C++11.

R>>И void* — это была самая ранняя версия, потом начали выбирать типы посложнее — разнообразные указатели на функции-члены.

У>А можно поподробнее? А то я что-то пропустил этот момент

Ну эскизно так:

class Foo
{
    typedef bool (Foo::*UnspecifiedBool)() const;
public:
    bool empty() const;
    operator UnspecifiedBool() const { !empty() ? &Foo::empty : 0; }
};


А были еще такие маньяки (типа меня), которые специально для этих целей вводили фейковые функции, в списке формальных параметров присутствовали типы, определенные в закрытой секции класса — чтоб уж точно таким указателем невозможно было воспользоваться