Index: testsuite/g++.dg/cpp0x/decltype34.C =================================================================== --- testsuite/g++.dg/cpp0x/decltype34.C (revision 0) +++ testsuite/g++.dg/cpp0x/decltype34.C (revision 0) @@ -0,0 +1,19 @@ +// PR c++/50870 +// { dg-options "-std=gnu++0x" } + +struct impl +{ + template static T create(); +}; + +template()->impl::create())> +struct tester{}; + +tester ti; + +template()->impl::create())> +int test() { return 0; } + +int i = test(); Index: cp/pt.c =================================================================== --- cp/pt.c (revision 180520) +++ cp/pt.c (working copy) @@ -13711,7 +13711,9 @@ tsubst_copy_and_build (tree t, member = TREE_OPERAND (t, 1); if (BASELINK_P (member)) member = tsubst_baselink (member, - non_reference (TREE_TYPE (object)), + TREE_CODE (object) == ARROW_EXPR + ? TREE_OPERAND (object, 0) + : non_reference (TREE_TYPE (object)), args, complain, in_decl); else member = tsubst_copy (member, args, complain, in_decl);