void test_basic_exclusion() { static_assert(!noexcept(HasCopyConstructor((HasCopyConstructor()))), ""); HasCopyConstructor hcc; static_assert(!noexcept(hcc = HasCopyConstructor()), ""); static_assert(!noexcept(HasCopyAssignment((HasCopyAssignment()))), ""); HasCopyAssignment hca; static_assert(!noexcept(hca = HasCopyAssignment()), ""); static_assert(noexcept(HasMoveConstructor((HasMoveConstructor()))), ""); HasMoveConstructor hmc; hmc = HasMoveConstructor(); // expected-error {{object of type 'HasMoveConstructor' cannot be assigned because its copy assignment operator is implicitly deleted}} (HasMoveAssignment(HasMoveAssignment())); // expected-error {{uses deleted function}} HasMoveAssignment hma; static_assert(noexcept(hma = HasMoveAssignment()), ""); static_assert(!noexcept(HasDestructor((HasDestructor()))), ""); HasDestructor hd; static_assert(!noexcept(hd = HasDestructor()), ""); }
void test_basic_exclusion() { static_assert(!noexcept(HasCopyConstructor((HasCopyConstructor()))), ""); HasCopyConstructor hcc; static_assert(!noexcept(hcc = HasCopyConstructor()), ""); static_assert(!noexcept(HasCopyAssignment((HasCopyAssignment()))), ""); HasCopyAssignment hca; static_assert(!noexcept(hca = HasCopyAssignment()), ""); static_assert(noexcept(HasMoveConstructor((HasMoveConstructor()))), ""); HasMoveConstructor hmc; hmc = HasMoveConstructor(); // expected-error {{selected deleted operator}} (HasMoveAssignment(HasMoveAssignment())); // expected-error {{uses deleted function}} HasMoveAssignment hma; static_assert(noexcept(hma = HasMoveAssignment()), ""); static_assert(!noexcept(HasDestructor((HasDestructor()))), ""); HasDestructor hd; static_assert(!noexcept(hd = HasDestructor()), ""); }