[[nodiscard]] operator new
От: _NN_ www.nemerleweb.com
Дата: 24.05.20 10:54
Оценка: 5 (1)
Почему при объявлении [nodiscard]] operator new, я не получаю предупреждение от компилятора о неиспользуемом значения возврата функции ?
C++20 объявляет все operator new как [nodiscard]].

#include <cstdlib>

class A
{
public:
    [[nodiscard]] static void* operator new(size_t count)
    {
        return ::operator new(count);
    }
};


void f()
{
    new A(); // Нет предупреждения
    A::operator new(10); // Есть предупреждение
}


https://gcc.godbolt.org/z/btaMA_
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: [[nodiscard]] operator new
От: reversecode google
Дата: 24.05.20 11:38
Оценка:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0600r1.pdf

So, [nodiscard]] should not signal bad code if this
a) can be useful not to use the return value
b) is common not to use the return value
c) doesn’t hurt and probably no state change was meant that doesn’t happen

Re: [[nodiscard]] operator new
От: Шахтер Интернет  
Дата: 24.05.20 12:58
Оценка: +1
Здравствуйте, _NN_, Вы писали:

_NN>Почему при объявлении [nodiscard]] operator new, я не получаю предупреждение от компилятора о неиспользуемом значения возврата функции ?

_NN>C++20 объявляет все operator new как [nodiscard]].

_NN>
_NN>#include <cstdlib>

_NN>class A
_NN>{
_NN>public:
_NN>    [[nodiscard]] static void* operator new(size_t count)
_NN>    {
_NN>        return ::operator new(count);
_NN>    }
_NN>};


_NN>void f()
_NN>{
_NN>    new A(); // Нет предупреждения
_NN>    A::operator new(10); // Есть предупреждение
_NN>}
_NN>


_NN>https://gcc.godbolt.org/z/btaMA_


Потому что в первом случае определённый тобой оператор вызывается внутри выражения new и возвращаемое значение там используется для создания объекта.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[2]: [[nodiscard]] operator new
От: _NN_ www.nemerleweb.com
Дата: 24.05.20 13:02
Оценка:
Здравствуйте, Шахтер, Вы писали:

Тогда неясен прок от этого nodiscard.
Я полагал это поможет отловить выделение памяти без сохранения результата .
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: [[nodiscard]] operator new
От: reversecode google
Дата: 24.05.20 13:39
Оценка:
судя по тому что нодискард на конструкторах тоже не работает ни в одном компилере
то это еще не доделали
а нодискард на нью только в С++20 добавили
вообщем еще толком ничего не готово
Re[4]: [[nodiscard]] operator new
От: _NN_ www.nemerleweb.com
Дата: 24.05.20 14:08
Оценка:
Здравствуйте, reversecode, Вы писали:

R>судя по тому что нодискард на конструкторах тоже не работает ни в одном компилере

R>то это еще не доделали
R>а нодискард на нью только в С++20 добавили
R>вообщем еще толком ничего не готово

У меня вопрос как всё таки должно быть когда доделают
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: [[nodiscard]] operator new
От: σ  
Дата: 24.05.20 15:12
Оценка: +1
Я бы сказал что это буг
Re[5]: [[nodiscard]] operator new
От: reversecode google
Дата: 24.05.20 15:16
Оценка:
с учетом того что нодискард на конструкторах работает на гцц и кланг 9 версии
и не рабоает на 10 версиях и выше этих же компилеров
а нодискард на конструкторах заявлен как улучшение в с++20
то они там что то курят а студняк который кодит компилеры, видимо отупел на карантине
и бажит за багом
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.