This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/16610] constructor template binding different than plain function for same types
- From: "igodard at pacbell dot net" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 17 Jul 2004 22:58:54 -0000
- Subject: [Bug c++/16610] constructor template binding different than plain function for same types
- References: <20040717210303.16610.igodard@pacbell.net>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From igodard at pacbell dot net 2004-07-17 22:58 -------
There isn't anything in the standard that would cause constructor templates to bind differently than plain functions, is there?
Incidentally, the array call is recognized only on global functions. Member functions and static members all think it's a reference:
#include <iostream>
template<typename T>
void Foo(T t) { std::cout << "any\n"; }
template<typename T>
void Foo(T*const& t) { std::cout << "reference\n"; }
template<typename T, size_t s>
void Foo(T(&t)[s]) { std::cout << "array\n"; }
template<typename T>
struct Frob {
Frob(T*const& t) { std::cout << "reference\n"; }
template<size_t s>
Frob(T(&t)[s]) { std::cout << "array\n"; }
void Bar(T*const& t) { std::cout << "reference\n"; }
template<size_t s>
void Bar(T(&t)[s]) { std::cout << "array\n"; }
static void Baz(T*const& t) { std::cout << "reference\n"; }
template<size_t s>
static void Baz(T(&t)[s]) { std::cout << "array\n"; }
};
int main() {
int* ri;
int ra[10];
Foo(ri);
Foo(ra);
Foo(new int[2]);
Frob<int> f1(ri);
Frob<int> f2(ra);
Frob<int> f3(new int[2]);
Frob<int> f4 = ri;
Frob<int> f5 = ra;
Frob<int> f6 = new int[2];
f1.Bar(ri);
f1.Bar(ra);
Frob<int>::Baz(ri);
Frob<int>::Baz(ra);
}
gives:
~/ootbc/members/members/sweetie/test/src$ a.out
reference
array
reference
reference
reference
reference
reference
reference
reference
reference
reference
reference
reference
Ivan
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16610