Вопросы

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

Я пытаюсь выяснить основную причину проблемы преобразования типов с указателями на функции-члены в 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

Читать:
Облачные функции firebase ограничивают детей

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

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

Как удалить заполнение по умолчанию в раскрывающемся списке с возможностью поиска во флаттере?

admin

Необходимость разделения файлов YAML для конвейеров

admin

Многокомпонентная загрузка Amazon S3 с использованием низкоуровневого API Java загружает только одну часть

admin

C11 Atomic Acquire / Release и x86_64 отсутствие согласованности загрузки / сохранения?

admin

Python (Pygame) нерестится во времени

admin

Обновление масштабируемого набора виртуальных машин Azure

admin