Пример ниже не работает со всеми компиляторами, которые я пробовал: gcc-8.2, clang-8.0 (были опробованы оба варианта --std=c++17
и std=c++2a
) и zapcc-2017.08.
С моей точки зрения, пример кода действителен и должен быть скомпилирован. Или, по крайней мере, должна быть более всеобъемлющая ошибка. Это похоже на ошибку в стандартной библиотеке, не покрывающую этот конкретный случай для result_of
. Я ошибся?
#include <type_traits>
using namespace std;
struct bar {
int a;
long b;
};
template<auto M>
struct foo {
static auto q(bar & b) {
return b.*M;
}
};
template<auto M>
auto qoo(bar & b) {
return b.*M;
}
// error: 'type' in 'class std::result_of<int(bar&)>' does not name a type
using f = typename result_of<decltype(foo<&bar::a>::q)>::type;
// error: 'type' in 'class std::result_of<int(bar&)>' does not name a type
using q= typename result_of<decltype(qoo<&bar::a>)>::type;
result_of
, отвечают на ваш вопрос? - person Lightness Races in Orbit   schedule 08.11.2018