由于此环境中的 GNU 标准库实现,我正在努力解决 c++11 符号解析中似乎存在歧义的问题:
- Arch Linux 4.2.5-1 (x86_64)
- 克++ 5.2.0
- 铿锵++ 3.7.0
Example:
#include <iostream>
#include <string>
struct version {
unsigned major;
unsigned minor;
unsigned patch;
version(unsigned major, unsigned minor, unsigned patch) :
major(major), minor(minor), patch(patch) { }
friend std::ostream & operator<<(std::ostream & out, version const& v) {
out << v.major << ".";
out << v.minor << ".";
out << v.patch;
return out;
}
};
int main(int argc, char ** argv) {
version v(1, 1, 0);
std::cout << v << std::endl;
return 0;
}
编译器错误:
error: member initializer 'gnu_dev_major' does not name a non-static data
member or base class
error: member initializer 'gnu_dev_minor' does not name a non-static data
member or base class
Command:
clang++ -std=c++11 -o test *.cpp
范围解析运算符似乎不适用于成员初始化列表,因此我无法弄清楚如何解决歧义。该示例在没有 c++11 标志的情况下编译良好。
另一种方法是使用大括号:
version(unsigned major, unsigned minor, unsigned patch) :
major{major}, minor{minor}, patch{patch} { }
那么宏就不会干扰,因为它们是类似函数的宏,需要括号才能调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)