[Bug c++/59705] New: possible compiler bug regarding SFINAE (program compiles fine)
haynberg at sig dot com
gcc-bugzilla@gcc.gnu.org
Mon Jan 6 21:49:00 GMT 2014
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59705
Bug ID: 59705
Summary: possible compiler bug regarding SFINAE (program
compiles fine)
Product: gcc
Version: 4.8.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: haynberg at sig dot com
The last two lines of output should be the same ("has iterator") but, for some
reason, GCC requires the member function to be qualified for the non-variadic
version to be selected. Clang does not need this and it has the same output
for the last two lines.
G++ version: 4.81 (also tried older versions)
System: SUSE SLES11 Enterprise SP1 Intel x86-64
$ cat t.cpp
#include <iostream>
using namespace std;
struct HasIter {
typedef int * const_iterator;
};
struct NoIter {
};
template <typename T>
void foo(const T &, typename T::const_iterator *)
{
cout << "has iterator" << endl;
}
template <typename T>
void foo(const T &, ...)
{
cout << "no iterator" << endl;
}
int main()
{
HasIter has_iter;
NoIter no_iter;
foo(no_iter, 0);
foo(has_iter, 0);
foo<HasIter>(has_iter, 0);
}
$ g++ t.cpp && a.out
no iterator
no iterator
has iterator
$ clang-3.3/bin/clang++ t.cpp && a.out
no iterator
has iterator
has iterator
Jay Haynberg
More information about the Gcc-bugs
mailing list