|
|
|
|
Defined in header <new> | ||
(1) | ||
struct nothrow_t{}; | (until C++11) | |
struct nothrow_t{explicit nothrow_t()=default;}; | (since C++11) | |
externconststd::nothrow_t nothrow; | (2) | |
std::nothrow_t
is an empty class type used to disambiguate the overloads of throwing and non-throwingallocation functions.std::nothrow
is a constant of it.
#include <iostream>#include <new> int main(){try{while(true){ newint[100000000ul];// throwing overload}}catch(conststd::bad_alloc& e){std::cout<< e.what()<<'\n';} while(true){int* p= new(std::nothrow)int[100000000ul];// non-throwing overloadif(p== nullptr){std::cout<<"Allocation returned nullptr\n";break;}}}
Output:
std::bad_allocAllocation returned nullptr
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 2510 | C++11 | the default constructor was non-explicit, which could lead to ambiguity | made explicit |
allocation functions (function)[edit] |