// { dg-do compile { target c++11 } } // { dg-require-effective-target hosted } #include struct X { void operator()(X*); char bigness[100]; }; using F = std::function; static_assert( std::is_nothrow_constructible::value, "" ); static_assert( std::is_nothrow_constructible::value, "" ); static_assert( ! std::is_nothrow_constructible::value, "" ); static_assert( ! std::is_nothrow_constructible::value, "" ); static_assert( std::is_nothrow_constructible::value, "" ); static_assert( ! std::is_nothrow_constructible::value, "" ); using R = std::reference_wrapper; static_assert( std::is_nothrow_constructible::value, "" ); // The standard requires that construction from a function pointer type // does not throw, but doesn't require that the construction is noexcept. // Strengthening that noexcept for these types is a GCC extension. static_assert( std::is_nothrow_constructible::value, "" ); // This is a GCC extension, not required by the standard: static_assert( std::is_nothrow_constructible::value, "" ); // This is a GCC extension, not required by the standard: static_assert( std::is_nothrow_constructible::value, "" ); auto c = [](X*){}; static_assert( std::is_nothrow_constructible::value, "" ); // The standard allows this to throw, but as a GCC extenension we store // closures with no captures in the std::function, so this is noexcept too: static_assert( std::is_nothrow_constructible::value, "" );