Информация об изменениях

Сообщение MSVC 2013/2015 internal compiler error от 04.09.2015 11:50

Изменено 04.09.2015 13:25 SaZ

Захотелось странного, опущу контекст.
Нужно написать функцию, которая вызовет метод класса и вернёт результат этого метода. Пробую:

#include <type_traits>
#include <iostream>

template <typename T, typename M, typename ...Args>
auto invoke( T *object, M method, Args&&... args ) -> decltype( *method )
{
    return ( static_cast<T*>( object )->*method )( std::forward<Args>( args )... );
}

struct Foo
{
    int triple( int val )
    {
        return val * 3;
    }
};

int main()
{
    Foo foo;
    std::cout << invoke( &foo, &Foo::triple, 5 );   // output: 15

    return 0;
}


Но тут вижу, что я что-то делаю не так.

Собственно, вопросы: 1) куда написать багрепорт, 2) как объявить функцию invoke
Захотелось странного, опущу контекст.
Нужно написать функцию, которая вызовет метод класса и вернёт результат этого метода. Пробую:
(Студия падает на таком)
#include <type_traits>
#include <iostream>

template <typename T, typename M, typename ...Args>
auto invoke( T *object, M method, Args&&... args ) -> decltype( *method )
{
    return ( static_cast<T*>( object )->*method )( std::forward<Args>( args )... );
}

struct Foo
{
    int triple( int val )
    {
        return val * 3;
    }
};

int main()
{
    Foo foo;
    std::cout << invoke( &foo, &Foo::triple, 5 );   // output: 15

    return 0;
}


Но тут вижу, что я что-то делаю не так.

Собственно, вопросы: 1) куда написать багрепорт, 2) как объявить функцию invoke