Почему при объявлении [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_
Здравствуйте, _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 и возвращаемое значение там используется для создания объекта.
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
Здравствуйте, Шахтер, Вы писали:
Тогда неясен прок от этого nodiscard.
Я полагал это поможет отловить выделение памяти без сохранения результата .
судя по тому что нодискард на конструкторах тоже не работает ни в одном компилере
то это еще не доделали
а нодискард на нью только в С++20 добавили
вообщем еще толком ничего не готово
Здравствуйте, reversecode, Вы писали:
R>судя по тому что нодискард на конструкторах тоже не работает ни в одном компилере
R>то это еще не доделали
R>а нодискард на нью только в С++20 добавили
R>вообщем еще толком ничего не готово
У меня вопрос как всё таки должно быть когда доделают
с учетом того что нодискард на конструкторах работает на гцц и кланг 9 версии
и не рабоает на 10 версиях и выше этих же компилеров
а нодискард на конструкторах заявлен как улучшение в с++20
то они там что то курят а студняк который кодит компилеры, видимо отупел на карантине
и бажит за багом