Шаблонная функция с переменным количеством параметров против
От: _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_ . Предыдущая версия .
Re[4]: Шаблонная функция с переменным количеством параметров против простой шабл
От: _NN_ www.nemerleweb.com
Дата: 05.08.19 19:37
Оценка: +1
Здравствуйте, σ, Вы писали:

_NN>>Насколько я понимаю так как указатель на свободную функцию всегда можно привести к

σ>указателю на любой тип свободной функции.

_NN>>К void* функцию приводить нельзя в любом случае.

σ>Не нельзя.
void(*)() не приводим к void* в общем случае.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Шаблонная функция с переменным количеством параметров против простой шаблонн
От: dead0k  
Дата: 05.08.19 16:08
Оценка:
Здравствуйте, _NN_, Вы писали:

А это так и задумано, что ты указатель на функцию с 1 аргументом пытаешь привести к указателю на функцию без аргументов во всех трех вариантах?
Re[2]: Шаблонная функция с переменным количеством параметров против простой шабл
От: _NN_ www.nemerleweb.com
Дата: 05.08.19 17:40
Оценка:
Здравствуйте, dead0k, Вы писали:

D>Здравствуйте, _NN_, Вы писали:


D>А это так и задумано, что ты указатель на функцию с 1 аргументом пытаешь привести к указателю на функцию без аргументов во всех трех вариантах?


Да.
Насколько я понимаю так как указатель на свободную функцию всегда можно привести к void(*)(), то указатель на функцию член класса всевгда можно првести к void(C::*)().
К void* функцию приводить нельзя в любом случае.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Шаблонная функция с переменным количеством параметров против простой шабл
От: σ  
Дата: 05.08.19 19:19
Оценка:
_NN>Насколько я понимаю так как указатель на свободную функцию всегда можно привести к
указателю на любой тип свободной функции.

_NN>К void* функцию приводить нельзя в любом случае.

Не нельзя.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.