основные и второстепенные макросы, определенные в sys / sysmacros.h, извлеченные <iterator>

Я пишу класс, имеющий матричную структуру, и я хочу, чтобы функция-член называлась 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 ++. Есть ли какая-то причина, по которой они должны быть определены? Это ошибка в стандартной библиотеке, которую я использую? (libstdc ++ 4.8.2 как в тестировании Debian)

Ответы на вопрос(1)

Ваш ответ на вопрос