http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56071
--- Comment #2 from Stephen <steveire at gmail dot com> 2013-01-22 01:44:19 UTC --- Interestingly, add variadic templates to the mix and it compiles: class B { template <typename T> friend struct A; private: B(int, char) {} ~B() {} }; template <typename T> struct A { T t; template<typename... Args> A(Args&&... args) noexcept(noexcept(T(std::forward<Args>(args)...))) : t(std::forward<Args>(args)...) {} }; struct C { A<B> delegate; template<typename... Args> C(Args&&... args) noexcept(noexcept(A<B>(std::forward<Args>(args)...))) : delegate(std::forward<Args>(args)...) { } };