mirror of
https://github.com/boostorg/scope.git
synced 2026-01-19 04:42:10 +00:00
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.
42 lines
979 B
C++
42 lines
979 B
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_throwing.cpp
|
|
* \author Andrey Semashev
|
|
*
|
|
* \brief This file tests that \c unique_resource rejects resource
|
|
* traits where `make_default` is not `noexcept`.
|
|
*/
|
|
|
|
#include <boost/scope/unique_resource.hpp>
|
|
|
|
struct resource
|
|
{
|
|
resource(int) noexcept {}
|
|
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() { 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;
|
|
}
|