Index: cp/semantics.c =================================================================== --- cp/semantics.c (revision 198366) +++ cp/semantics.c (working copy) @@ -5398,6 +5398,7 @@ finish_decltype_type (tree expr, bool id_expressio break; case COMPONENT_REF: + case COMPOUND_EXPR: mark_type_use (expr); type = is_bitfield_expr_with_lowered_type (expr); if (!type) Index: testsuite/g++.dg/cpp0x/decltype52.C =================================================================== --- testsuite/g++.dg/cpp0x/decltype52.C (revision 0) +++ testsuite/g++.dg/cpp0x/decltype52.C (working copy) @@ -0,0 +1,18 @@ +// PR c++/56450 +// { dg-do compile { target c++11 } } + +template +T&& declval(); + +template +struct is_same +{ static constexpr bool value = false; }; + +template +struct is_same +{ static constexpr bool value = true; }; + +struct A { static const int dummy = 0; }; + +static_assert(is_same().dummy), const int>::value, ""); +static_assert(!is_same().dummy), const int&>::value, "");