Я не могу понять правильный синтаксис для вывода возвращаемого значения статической функции-члена зависимого типа. Я уже пробовал дюжину комбинаций, включая использование :: std :: result_of, и ни одна из них, похоже, не работает. Вот вариант, который выглядит наиболее многообещающим (по крайней мере, работает в нешаблонном контексте):
struct
t_In
{
};
struct
t_Out
{
static auto
Method(t_In &) -> t_Out
{
return(t_Out());
}
};
template<typename tp_Out, typename tp_In, typename tp_Enable = void> struct
t_Template;
template<typename tp_Out, typename tp_In> struct
t_Template
<
tp_Out
, tp_In
, typename ::std::enable_if
<
::std::is_same
<
decltype
(
::std::remove_cv // adding typename here makes Method look like type
<
typename ::std::remove_reference
<
tp_Out
>::type
>::type::Method(::std::declval<tp_In>()) // Err: does not evaluate to function ...
)
, tp_Out
>::value
>::type
>
{
};
Изменить: компилятор VS2013, обратите внимание, что я даже ничего не создаю, всплывающее сообщение об ошибке только из этого шаблона
std::declval<tp_In&>()
? - person Piotr Skotnicki   schedule 11.08.2015t_Template
, какой компилятор вы используете? - person Piotr Skotnicki   schedule 11.08.2015