Consider following code. struct Outer { static const int value = 1 ;
template< int value > struct Inner { static const int inner_value = value ; static int get_value() { return value ; } // which value? } ; } ; int main() { typedef Outer::Inner<2> type ; type::inner_value ; // 2. value is template parameter name. type::get_value() ; // 1. value is Outer::value. } For Outer::Inner<2>, template parameter name "value" is 2. Outer::Inner<2>::inner_value is evaluated to 2. But Outer::Inner<2>::get_value() is evaluated to 1. It looks like gcc lookup Outer::value for unqualified name value in the function body scope of get_value(). Is it a correct behavior? I think template parameter name of Inner should hide the Outer::value. -- Summary: Template parameter name does not hide outer class scope's member name Product: gcc Version: 4.6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: boostcpp at gmail dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45625