std::experi...urce_checked(3)
okay bestie, this one's from the C++ Standard Libary manual β yes, that's literally the manual name, typo and all, no cap π β and it's page 3. We're about to make a unique_resource that knows when not to call its deleter. Main character energy fr fr π
π NAME π
std::experimental::make_unique_resource_checkedβ the original repeats the same name after the dash, so here it is again:std::experimental::make_unique_resource_checked. Iconic, honestly β¨
β¨ Synopsis β¨
Defined in header <experimental/scope>.
This is the library fundamentals TS v3 version, iykyk π¦
template< class R, class D, class S = std::decay_t<R> >
std::experimental::unique_resource<std::decay_t<R>,
std::decay_t<D>>
make_unique_resource_checked( R&& r, const S& invalid, D&& d )
noexcept(/*see below*/);
So what's the tea? It creates a unique_resource, initializes its stored resource handle with std::forward<R>(r), and initializes 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. That's the serious part, bestie β do not ignore it π
π Exceptions π
Any exception thrown in initialization of the stored resource handle and the deleter.
noexcept specification:
noexcept(
std::is_nothrow_constructible_v<std::decay_t<R>, R> &&
std::is_nothrow_constructible_v<std::decay_t<D>, D>
)
π§ Notes π§
make_unique_resource_checked exists to avoid calling a deleter function with an invalid argument. Periodt.
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. Slay πΈ
π Example π
// Run this code
#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 exits.");
else
std::puts("The file does not exist.");
}
π Possible output π
The file does not exist.
π See also π
- Category:
conditionally noexcept
π¦ cute little sign-off: the source/version ishttp://cppreference.com, dated2024.06.10. That's the footer tea, bestie. Mwah πβ¨
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms