http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58435
--- Comment #2 from Paolo Carlini <paolo.carlini at oracle dot com> --- Reduced: template<typename T, typename U> struct same { static const bool value = false; }; template<typename T> struct same<T, T> { static const bool value = true; }; template <template <typename> class F, typename T> struct apply { typedef F<T> type; }; template <typename T> using map = const T; static_assert(same<apply<map, int>::type, const int>::value, "");