On 2 December 2010 04:52, zhang qingshan wrote: > std(N3126) 8.3.2/1 says that: > > Cv-qualified references are ill-formed except when the cv-qualifiers > are introduced through > the use of a typedef (7.1.3) or of a template type argument (14.3), in > which case the cv-qualifiers are ignored. > > Why the following code compiled failed on GCC 4.5.0 ? > template <typename T> void foo (T const &); > void baz (); > foo (baz); you can't call a function at namespace scope This is the same as: void foo() { } foo(); The template and the reference has nothing to do with it. > while > template <typename T> void foo (T const &); > void baz (); > void Test() { > foo (baz); > } > > successfully. Really wired. No, that's completely normal, at function scope you can call another function. Like: void foo() { } void bar() { foo(); } > another question is: what is cv-qualifier reference ? Your guys told me that: > const int &m; is not a cv-qualifier reference. Could you give me an > example on the cv-qualifier reference ? Thanks. int i = 0; int& const cref = i; // error - cannot have cv-qualified reference