// PR c++/57734 // { dg-do compile { target c++11 } } template struct same_type { static const bool value = false; }; template struct same_type { static const bool value = true; }; enum e { zero }; enum class eclass { one }; template using enum_alias = e; template using eclass_alias = eclass; typedef enum_alias etest0; typedef enum_alias etest0; typedef enum_alias etest0; typedef enum_alias etest1; static_assert (same_type::value, ""); typedef eclass_alias ectest0; typedef eclass_alias ectest0; typedef eclass_alias ectest0; typedef eclass_alias ectest1; static_assert (same_type::value, ""); template enum_alias efoo(T f) { return enum_alias::zero; } template constexpr enum_alias cefoo(T f) { return enum_alias::zero; } static_assert ( cefoo(1) == e::zero, ""); template eclass_alias ecfoo(T f) { return eclass_alias::one; } template constexpr eclass_alias cecfoo(T f) { return eclass_alias::one; } static_assert ( cecfoo(1) == eclass::one, "");