我有一个函数对象,它是另一个函数的包装器:
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,它只会被我的编译器忽略。
这是我可以依赖的行为吗,它是否以任何方式标准化?