Added 1 more test for emplace()

This commit is contained in:
Andrzej Krzemienski
2015-05-16 00:06:55 +02:00
parent 8ca74951b0
commit ff90f939ed

View File

@ -157,6 +157,39 @@ void test_no_assignment_on_emplacement()
BOOST_TEST_EQ(*ot, ""); BOOST_TEST_EQ(*ot, "");
} }
namespace no_rvalue_refs {
class Guard
{
public:
int which_ctor;
Guard () : which_ctor(0) { }
Guard (std::string const&) : which_ctor(5) { }
Guard (std::string &) : which_ctor(6) { }
private:
Guard(Guard const&);
void operator=(Guard const&);
};
void test_emplace()
{
const std::string cs;
std::string ms;
optional<Guard> o;
o.emplace();
BOOST_TEST(o);
BOOST_TEST(0 == o->which_ctor);
o.emplace(cs);
BOOST_TEST(o);
BOOST_TEST(5 == o->which_ctor);
o.emplace(ms);
BOOST_TEST(o);
BOOST_TEST(6 == o->which_ctor);
}
}
int main() int main()
{ {
#if (!defined BOOST_NO_CXX11_RVALUE_REFERENCES) && (!defined BOOST_NO_CXX11_VARIADIC_TEMPLATES) #if (!defined BOOST_NO_CXX11_RVALUE_REFERENCES) && (!defined BOOST_NO_CXX11_VARIADIC_TEMPLATES)
@ -167,8 +200,7 @@ int main()
#endif #endif
test_clear_on_throw(); test_clear_on_throw();
test_no_assignment_on_emplacement(); test_no_assignment_on_emplacement();
no_rvalue_refs::test_emplace();
return boost::report_errors(); return boost::report_errors();
} }