mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-19 00:55:13 +08:00
libstdc++: Add missing test for std::optional::transform(F&&)
The test_copy_elision() function was supposed to ensure that the result is constructed directly in the std::optional, without early temporary materialization. But I forgot to write the test. libstdc++-v3/ChangeLog: * testsuite/20_util/optional/monadic/transform.cc: Check that an rvalue result is not materialized too soon.
This commit is contained in:
parent
154c6d430e
commit
4ba4b05315
@ -110,6 +110,23 @@ static_assert( test_forwarding() );
|
||||
constexpr bool
|
||||
test_copy_elision()
|
||||
{
|
||||
struct immovable
|
||||
{
|
||||
constexpr immovable(int p) : power_level(p) { }
|
||||
immovable(immovable&&) = delete;
|
||||
|
||||
int power_level;
|
||||
};
|
||||
|
||||
struct Force
|
||||
{
|
||||
constexpr immovable operator()(int i) const { return {i+1}; }
|
||||
};
|
||||
|
||||
std::optional<int> irresistible(9000);
|
||||
std::optional<immovable> object = irresistible.transform(Force{});
|
||||
VERIFY( object->power_level > 9000 );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user