Axel Quote:
"Anyways there is an already filed GCC bug about this defect report
against the standard,
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29131 ."

That bug report is suspended. Is this due to the C++ standards issue
you referred to?:
http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_active.html#225
That C++ standards issue is also 10 years old, and so (I would guess)
unlikely to be fixed any time soon.


However, (regardless of the outcome of the C+ standards committee on
that issue), it seems that either the non-template foo(), in its
current position after bar(), should either always be available for
lookup or never available. Its visibility shouldn't be affected by the
presence of a template version of foo() declared before bar(), which
is what is happening now: Removing the original foo() allows the code
to compile.

So, regardless of which stance GCC takes regarding the standards
issue, in my view GCC should still remain consistent. Either accept
both versions (with and without the original template foo()) or reject
both versions.

The current bug report (29131) doesn't mention this inconsistency if I
read it correctly.



Another few things to note:
When I first came across the problem in my code, both versions of
foo() were template functions. One was generic foo<T>(T), the other
was foo<T>(MyStruct<T>). So the fact that the latter foo() in my
example was a non-template foo() isn't affecting things.

Also, at the time when I found the issue, foo() and bar() were within
a custom namespace, so namespaces or the lack of them also isn't
affecting things.

Lastly, WRT the standards issue, this issue persists whether or not
fundamental types are used. Replacing any fundamental types with
custom empty structs doesn't affect anything.

Reply via email to