From 0a32d85a09c354725c2c18fb7ac42d2809197070 Mon Sep 17 00:00:00 2001 From: jason Date: Thu, 5 May 2011 02:51:01 +0000 Subject: [PATCH] PR c++/48749 * class.c (resolves_to_fixed_type_p): Don't look closely in templates. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@173414 138bc75d-0d04-0410-961f-82ee72b054a4 index d19610a..c833329 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -5978,7 +5978,17 @@ resolves_to_fixed_type_p (tree instance, int* nonnull) { tree t = TREE_TYPE (instance); int cdtorp = 0; - tree fixed = fixed_type_or_null (instance, nonnull, &cdtorp); + tree fixed; + + if (processing_template_decl) + { + /* In a template we only care about the type of the result. */ + if (nonnull) + *nonnull = true; + return true; + } + + fixed = fixed_type_or_null (instance, nonnull, &cdtorp); if (fixed == NULL_TREE) return 0; if (POINTER_TYPE_P (t)) new file mode 100644 index 0000000..e236504 --- /dev/null +++ b/gcc/testsuite/g++.dg/conversion/base1.C @@ -0,0 +1,20 @@ +// PR c++/48749 + +struct Tuple3 +{ + float x; +}; + +struct Pos: virtual Tuple3 { }; + +struct TexCoords +{ + Pos pos; +}; + +template +void eval (const TexCoords &coords) +{ + const Pos &pos = coords.pos; + pos.x; +} -- 1.7.0.4