2
0
mirror of https://github.com/boostorg/scope.git synced 2026-01-19 04:42:10 +00:00
Files
scope/test/compile_fail/unique_resource_bad_rtraits_mkdef_nonconstructible.cpp
Andrey Semashev d53d4f43af Enforced correctness checks for resource traits, improved docs.
Instead of silently switching to the unique_resource implementation
based on the "allocated" flag if the resource traits don't conform
to the requirements, issue hard compilation errors. This should better
protect against mistakes, where the user assumes unique_resource
behaves as if it is using the resource traits while it actually doesn't.

Improved documentation of requirements for resource traits and documented
the "reduced" form of resource traits, where the traits only provide
the default resource value but otherwise don't change unique_resource
behavior.
2024-01-31 04:52:12 +03:00

43 lines
1.0 KiB
C++

/*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
* https://www.boost.org/LICENSE_1_0.txt)
*
* Copyright (c) 2024 Andrey Semashev
*/
/*!
* \file unique_resource_bad_rtraits_mkdef_nonconstructible.cpp
* \author Andrey Semashev
*
* \brief This file tests that \c unique_resource rejects resource
* traits where the resource cannot be constructed from the
* result of `make_default`.
*/
#include <boost/scope/unique_resource.hpp>
struct resource
{
resource(int) = delete;
resource& operator= (int) noexcept { return *this; }
};
struct resource_deleter
{
using result_type = void;
result_type operator() (resource const&) const noexcept {}
};
struct bad_resource_traits
{
static int make_default() noexcept { return 10; }
static bool is_allocated(resource const& res) noexcept { return false; }
};
int main()
{
boost::scope::unique_resource< resource, resource_deleter, bad_resource_traits > ur;
return 0;
}