Шаблонная функция с переменным количеством параметров против
От: _NN_ www.nemerleweb.com
Дата: 05.08.19 14:29
Оценка: 1 (1)
Пытаюсь привести функцию член к указателю на функцию член, но компиляторы не согласны между собой.
Кто прав ?

https://gcc.godbolt.org/z/QNsgwd

template<typename T>
struct a
{
    template <typename... Args>
    void va(Args...) {}

    template <typename X>
    void x(X) {}

    void y(int) {}
};

struct b : a<b>
{
    void testva()
    {
        using F = void (a<b>::*)();

        F f = (F)&a<b>::va<int>; // gcc: error, msvc: error, clang: ok
    }

    void testx()
    {
        using F = void (a<b>::*)();

        F f = (F)&a<b>::x<int>;// gcc: error, msvc: ok, clang: ok
    }

    void testy()
    {
        using F = void (a<b>::*)();

        F f = (F)& a<b>::y; // gcc: ok, msvc: ok, clang: ok
    }
};



Упрощённый пример
https://godbolt.org/z/Racc05

template<class... T>
void freefunc(T...) {}

struct a {
    template<class... T>
    void memfunc(T...) {}
};

void test() {
    using F = void(*)();
    using MF = void(a::*)();
    F f = (F)freefunc<int>; // clang: ok, gcc error, msvc: error
    MF mf = (MF)&a::memfunc<int, double>; // clang: ok, gcc error, msvc: error
}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Отредактировано 05.08.2019 17:46 _NN_ . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.