std::experimental::make_unique_resource_checked
<experimental/scope>
std::experimental::unique_resource<std::decay_t <R>, std::decay_t <D>>
make_unique_resource_checked( R&& r, const S& invalid, D&& d )
Creates a unique_resource
, initializes its stored resource handle with std::forward <R>(r) and its deleter with std::forward <D>(d). The created unique_resource
owns the resource if and only if bool(r == invalid) is false.
The program is ill-formed if the expression r == invalid cannot be contextually converted to bool, and the behavior is undefined if the conversion results in undefined behavior or throws an exception.
[edit] Paramaters
[edit] Reture value
A unique_resource
described above.
[edit] Exceptions
Any exception thrown in initialization of the stored resource handle and the deleter.
std::is_nothrow_constructible_v <std::decay_t <R>, R> &&
std::is_nothrow_constructible_v <std::decay_t <D>, D>
[edit] Notes
make_unique_resource_checked
exists to avoid calling a deleter function with an invalid argument.
Resource handle r is either copied or moved into the return value, and the created unique_resource
always holds an underlying resource handle with object type.
[edit] Example
#include <cstdio> #include <experimental/scope> int main() { // avoid calling fclose when fopen fails auto file = std::experimental::make_unique_resource_checked( std::fopen ("potentially_nonexistent_file.txt", "r"), nullptr, [](std::FILE *fptr) { std::fclose (fptr); } ); if (file.get()) std::puts ("The file exists."); else std::puts ("The file does not exist."); }
Possible output:
The file does not exist.