I've commented the following code with, or whithout (uh!), the errors that g++
reports.
template< typename _Type >
struct S {
operator S();
}; // struct S< _Type >
template< typename _Type >
struct T {
S< _Type > t_;
S< int > i_;
void
foo() {
t_.S(); // 1.1 uh!
t_.S< _Type >(); // 1.2
// i_.S(); // 1.3 invalid use of `struct S<int>'
// i_.S< int >(); // 1.4 internal compiler error: in
lookup_member, at cp/search.c:1287
// t_.~S(); // 2.1 expected class-name before '('
token
t_.~S< _Type >(); // 2.2
i_.~S(); // 2.3 uh!
i_.~S< int >(); // 2.4
// t_.operator S(); // 3.1 `S' is not a type
t_.operator S< _Type >(); // 3.2
i_.operator S(); // 3.2 uh!
i_.operator S< int >(); // 3.4
}
}; // struct T< _Type >
--
Summary: Explicit invocation of constructors, destructors and
conversion operators in template code
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: fasbjx at free dot fr
GCC build triplet: x86_64-pc-linux-gnu
GCC host triplet: x86_64-pc-linux-gnu
GCC target triplet: x86_64-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24377