std::experimental::make_unique_resource_checked
| Technical Specification | ||||
| Filesystem library (filesystem TS) | ||||
| Library fundamentals (library fundamentals TS) | ||||
| Library fundamentals 2 (library fundamentals TS v2) | ||||
| Library fundamentals 3 (library fundamentals TS v3) | ||||
| Extensions for parallelism (parallelism TS) | ||||
| Extensions for parallelism 2 (parallelism TS v2) | ||||
| Extensions for concurrency (concurrency TS) | ||||
| Extensions for concurrency 2 (concurrency TS v2) | ||||
| Concepts (concepts TS) | ||||
| Ranges (ranges TS) | ||||
| Reflection (reflection TS) | ||||
| Mathematical special functions (special functions TR) | ||||
| Experimental Non-TS | ||||
| Pattern Matching | ||||
| Linear Algebra | ||||
| std::execution | ||||
| Contracts | ||||
| 2D Graphics |
| Member functions | ||||
| Modifiers | ||||
| Observers | ||||
| Non-member functions | ||||
make_unique_resource_checked | ||||
| Deduction guides |
| Defined in header <experimental/scope>
|
||
| template< class R, class D, class S = std::decay_t<R> > std::experimental::unique_resource<std::decay_t<R>, std::decay_t<D>> |
(library fundamentals TS v3) | |
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.
Contents |
[edit] Paramaters
| r | - | a resource handle |
| d | - | a deleter to use to dispose the resource |
| invalid | - | a value indicating the resource handle is invalid |
[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.