Вопросы

разница между типами указателей на функции-члены, не являющиеся шаблоном

Я пытаюсь выяснить основную причину проблемы преобразования типов с указателями на функции-члены в C ++ (VS2012).

Я сузил его до разницы в typeid указателя на функцию-член шаблона и функцию-член, не являющуюся шаблоном. Рассмотрим код:

#include <typeinfo>
#include <iostream>

class foo
{
    public:    
        template<int k>
        void func1() {}

        void func2() {}
};

typedef void (foo::*foofunc)();

int main()
{
    //this gives "int"
    std::cout<<typeid(&foo::func1<3>).name()<<std::endl;

    //this gives "void (__thiscall *)(void)"
    std::cout<<typeid(&foo::func2).name()<<std::endl;

    return 0;
}

func2 имеет ожидаемое значение. Почему указатель на func1 имеет тип int, если обе функции-члены одного и того же класса?

ПРИМЕЧАНИЕ. Это происходит только в Windows.

В GCC 4.8 они оба печатают M3fooFvvE   —  person Cygnus    schedule 19.11.2015

@PaoloM: Ага. Я не уверен, почему имя неясно, но, по крайней мере, они оба имеют один и тот же тип с GCC.   —  person Cygnus    schedule 19.11.2015

Читать:
Покрытие Go для нескольких пакетов и значок покрытия Gitlab

Что вы имеете в виду под непонятным? Кстати, это из cppreference: нет гарантии, что то же На экземпляр std :: type_info будут ссылаться все вычисления выражения typeid для одного и того же типа, хотя std :: type_info :: hash_code этих объектов type_info будет идентичным, как и их std :: type_index.   —  person Cygnus    schedule 19.11.2015

Похожие записи

рельсы чайная ложка Тестирование в движке Не загружается *_spec.js

admin

ошибка R10 при развертывании приложения Flask с докером на heroku

admin

«Нет модуля с именем ‘_portaudio’: решение не найдено

admin

Ошибка сегментации при вызове функции сборки x86 из программы C

admin

Как заставить моего бота отвечать только на реакцию на конкретное сообщение? | discord.py

admin

Как запустить автоматический запуск работы в Jenkins в пользовательской (не основной) ветке?

admin