diff --git a/SG14/inplace_function.h b/SG14/inplace_function.h index 5c2e9c73..0db50777 100644 --- a/SG14/inplace_function.h +++ b/SG14/inplace_function.h @@ -94,31 +94,27 @@ template struct vtable invoke_ptr{ [](storage_ptr_t, Args&&...) -> R { throw std::bad_function_call(); } }, - copy_ptr{ [](storage_ptr_t, storage_ptr_t) noexcept -> void {} }, - relocate_ptr{ [](storage_ptr_t, storage_ptr_t) noexcept -> void {} }, - destructor_ptr{ [](storage_ptr_t) noexcept -> void {} } + copy_ptr{ [](storage_ptr_t, storage_ptr_t) -> void {} }, + relocate_ptr{ [](storage_ptr_t, storage_ptr_t) -> void {} }, + destructor_ptr{ [](storage_ptr_t) -> void {} } {} template explicit constexpr vtable(wrapper) noexcept : - invoke_ptr{ [](storage_ptr_t storage_ptr, Args&&... args) - noexcept(noexcept(std::declval()(static_cast(args)...))) -> R + invoke_ptr{ [](storage_ptr_t storage_ptr, Args&&... args) -> R { return (*static_cast(storage_ptr))( static_cast(args)... ); } }, - copy_ptr{ [](storage_ptr_t dst_ptr, storage_ptr_t src_ptr) - noexcept(std::is_nothrow_copy_constructible::value) -> void + copy_ptr{ [](storage_ptr_t dst_ptr, storage_ptr_t src_ptr) -> void { ::new (dst_ptr) C{ (*static_cast(src_ptr)) }; } }, - relocate_ptr{ [](storage_ptr_t dst_ptr, storage_ptr_t src_ptr) - noexcept -> void + relocate_ptr{ [](storage_ptr_t dst_ptr, storage_ptr_t src_ptr) -> void { ::new (dst_ptr) C{ std::move(*static_cast(src_ptr)) }; static_cast(src_ptr)->~C(); } }, - destructor_ptr{ [](storage_ptr_t src_ptr) - noexcept -> void + destructor_ptr{ [](storage_ptr_t src_ptr) -> void { static_cast(src_ptr)->~C(); } } {}