C++ std::atomic:<bool>:fetch_or 未实现?
c++ std::atomic<bool>::fetch_or not implemented?
加上这段代码:
class myclass {
volatile std::atomic<bool> flag;
public:
myclass(): flag(false) {}
bool get_flag() { return flag; }
bool try_set() {
return !flag.fetch_or(flag, true);
}
void reset() {
flag = false;
}
};
我有这个编译错误:
error: ‘volatile struct std::atomic<bool>’ has no member named ‘fetch_or’
return !flag.fetch_or(flag, true);
如果我将模板参数更改为int
,它将编译:
class myclass {
volatile std::atomic<int> flag;
public:
myclass(): flag(0) {}
bool get_flag() { return flag; }
bool try_set() {
return !flag.fetch_or(flag, true);
}
void reset() {
flag = 0;
}
};
原子参考说"完全专门化atomic<bool>
"被视为"非专门化",我认为这是问题的根源。所以我的疑问:
- "完全专门化"如何被"视为非专业化"?
- 在调用
flag.fetch_or()
时,我可能会面临任何棘手的陷阱,使用作为标志模板参数int
而不是bool
?
我正在使用gcc 5.1.0,并与-std=c++14
编译。
c++ 11 N3337草案不要求bool
使用该方法。
29.5 "Atomic types"
template <class T> struct atomic {
[...]
}
template <> struct atomic<integral> {
[...]
integral fetch_or(integral , memory_order = memory_order_seq_cst) noexcept;
[...]
}
29.5/1: 原子的专门化操作的语义在29.6中定义。
29.6.3/2 "原子类型上的算术运算":
在这些函数和函数模板特化的声明中,名称integral指的是一个整型,名称atomic-integral指的是表145中或从表146中推断出来的atomic或命名的integral基类。
和表145不包含bool
。
所以只有struct
的整型专门化(不包括bool
)才有这个方法。
类型bool、char、char16_t、char32_t、wchar_t以及有符号整型和无符号整型统称为整型。整型的同义词是整型。
相关文章:
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 模式"allocate memory or use existing data"
- N-API include an .so or dll
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- 将 OR 逻辑运算符从 C++ 转换为 Fortran
- CPP 中的瓦尔格林德和记忆泄漏:"Conditional jump or move depends on uninitialised values"
- 我如何将 OR 与 if 语句一起使用字符串
- 将 if 语句中的字符与 or 进行比较
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- "No such file or directory" C++标头问题
- 处理 std::enable_if<...中谓词的逻辑"OR">
- C++ 虽然语句不适用于字符串和"or"
- 我在 #include < bits/stdc++h.> 放置时出错"No such file or directory"
- Python Bitwise OR
- 逻辑'double free or corruption (fasttop)'错误
- 对atomic fetch和add的硬件支持vs fetch和or