Make '=delete' greate again!

Сергей Аксенов
Сергей Аксенов

Например, такой код работать не будет

    class Class
    {
    public:
        Class(uint64_t value);

        operator uint64_t&();
        operator const uint64_t&() const;

        operator uint32_t&() = delete;
        operator const uint32_t&() const = delete;

    private:
        uint64_t m_value;
    };

double val = Class(0); // ambiguous call (GCC)

Вообще, конечно, эта идея вообще не сработает =( Просто это реальная попытка уменьшить боль от неявного приведения uint64_t к uint32_t. Особенно актуально для size_t, который отличается на x86 и x64.

Подробнее здесь:
https://stackoverflow.com/questions/38565358/call-ambigious-due-to-a-deleted-function
https://stackoverflow.com/questions/13703186/ambiguous-overload-with-deleted-move-constructor

0
рейтинг
1 комментарий
Andrey Davydov

Пишите вместо `= delete` `requires(false)`.

Andrey Davydov
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения