[Bug c++/44908] New: SFINAE vs pointer to member via virtual base
paolo dot carlini at oracle dot com
gcc-bugzilla@gcc.gnu.org
Sat Jul 10 21:52:00 GMT 2010
This is another case where we have a compile-time errors (Ok with ICC). Note,
with swapped From and To types compiles.
struct A { };
struct E
: virtual A { };
template<bool, typename T = void> struct enable_if { typedef T type; };
template<typename T> struct enable_if<false, T> { };
template<typename From, typename To>
class mini_is_convertible
{
typedef char one;
typedef struct { char arr[2]; } two;
template<typename To1>
static void test_aux(To1);
template<typename From1, typename To1>
// static decltype(test_aux<To1>(std::declval<From1>()), one())
static typename
enable_if<(sizeof(test_aux<To1>(From1()), 1) > 0), one>::type
test(int);
template<typename, typename>
static two test(...);
public:
static const bool value = sizeof(test<From, To>(0)) == 1;
};
int main()
{
mini_is_convertible<int (E::*) (int), int (A::*) (int)>::value; // compiles
mini_is_convertible<int (E::*), int (A::*)>::value; // compiles
mini_is_convertible<int (A::*) (int), int (E::*) (int)>::value; // doesn't
mini_is_convertible<int (A::*), int (E::*)>::value; // doesn't
}
--
Summary: SFINAE vs pointer to member via virtual base
Product: gcc
Version: 4.6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: paolo dot carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44908
More information about the Gcc-bugs
mailing list