【发布时间】:2014-04-10 01:29:30
【问题描述】:
我正在编写一个具有类似矩阵结构的类,并且我希望有一个名为 minor 的成员函数与矩阵运算相同。这会触发一些错误。我系统上的最小测试用例:
#include <iterator>
void minor(int row, int col);
编译时,clang 提供以下错误:
$ clang++ -Weverything -std=c++11 test.cpp
test.cpp:2:21: error: too many arguments provided to function-like macro invocation
void minor(int row, int col);
^
/usr/include/x86_64-linux-gnu/sys/sysmacros.h:67:10: note: macro 'minor' defined here
# define minor(dev) gnu_dev_minor (dev)
^
test.cpp:2:6: error: variable has incomplete type 'void'
void minor(int row, int col);
^
2 errors generated.
$
sys/sysmacros.h 的相关部分是:
/* Access the functions with their traditional names. */
# define major(dev) gnu_dev_major (dev)
# define minor(dev) gnu_dev_minor (dev)
# define makedev(maj, min) gnu_dev_makedev (maj, min)
很明显,这些特定的宏可以是#undef'd,但将诸如major 和minor 之类的常规词定义为宏似乎很愚蠢,尤其是在引入C++ 标准库的一部分时。有什么理由需要定义这些吗?这是我正在使用的标准库中的错误吗? (Debian 测试中的 libstdc++ 4.8.2)
【问题讨论】:
-
试试
-std=c++11 -ansi -
添加 -ansi 可以使最小的测试用例工作,但它会在我的项目的其他地方触发错误,所以我不能启用它,至少在短期内是这样。除了 -ansi 还有其他选择吗?
标签: c++ macros glibc libstdc++