#include <atomic>
std::atomic<int> bar;
auto foo() -> decltype(bar)
{
return bar++;
}
我收到此gcc错误消息:
error: use of deleted function ‘std::atomic<int>::atomic(const std::atomic<int>&)’
将decltype()
中的类型更改为int
有效。为了使我的代码更加通用,我如何获得int
之间定义的<>
类型?
答案 0 :(得分:4)
你可以这样做:
auto foo() -> decltype(bar.operator++())
{
return bar++;
}
答案 1 :(得分:2)
好吧,你不想返回与bar相同类型的东西......
≥C++ 98
template<typename T>
T foo() {
return bar++;
}
≥C++ 11
auto foo() -> decltype(bar++) {
return bar++;
}
≥C++ 14
auto foo() {
return bar++;
}
请注意当我们来自C ++ 14时,C ++ 11语法看起来有多简单(尽管是样板文件)。
答案 2 :(得分:1)
是的,std::atomic
没有value_type
成员或类似的东西,所以这不是“微不足道的”。嗯,确实如此,但事实并非如此。 MEH。
如果您遇到C ++ 11:
auto foo() -> decltype(bar.load())
{
return bar++;
}
从C ++ 14开始,您可以简单地写一下:
#include <atomic>
std::atomic<int> bar;
auto foo()
{
return bar++;
}