我有一个函数对象,它是另一个函数的包装器:
template <typename FuncT>
class Wrapper
{
private:
FuncT funcToWrap;
public:
Wrapper(FuncT ftw) : funcToWrap(ftw){};
template<typename ...ARG>
typename std::result_of<FuncT(ARG&&...)>::type operator()(ARG&&... args){
return funcToWrap(std::forward<ARG>(args)...);
}
};
int main(){
std::function<void()> testfunc = [](){ std::cout << "Test" << std::endl; };
Wrapper<decltype(testfunc)> test{testfunc};
test();
}
我想做的是将 标记operator()
为[[nodiscard]]
好像std::result_of<FuncT(ARG&&...)>::type
不是void
。
我注意到的是,当我将[[nodiscard]]
返回类型的模板评估的情况下放入 时void
,它只会被我的编译器忽略。
这是我可以依赖的行为吗,它是否以任何方式标准化?