如何解决系统头宏和boost模板函数之间的名称冲突?

时间:2017-02-11 21:44:15

标签: c++ boost xlc

使用boost模板函数解决冲突的宏名称的最佳方法是什么? 在包含boost / chrono.hpp之后我得到了编译器错误:

  

CCN5816(W)为宏“round”指定的参数太多。额外的参数被忽略。   “/usr/include/math.h”,第2133.16行:CCN5425(I)“round”在“/usr/include/math.h”的第2133行定义。

-Wall -Wextra -pedantic-errors -Wno-deprecated -std=c++14 -march=native -g -ggdb -fno-omit-frame-pointer与模板函数round冲突。

/usr/include/math.h

boost::chrono::round

/boost/chrono/round.hpp

#define round(x)         __round(x)
  • 如果我修补round.hpp
  • ,似乎我可以namespace boost { namespace chrono { /** * rounds to nearest, to even on tie */ template <class To, class Rep, class Period> To round(const duration<Rep, Period>& d) {
  • 也许我可以使用parantheses?在macro and member function conflict的答案中,函数名称在括号内,但这是在函数的使用中,而不是在其定义中。它也会在定义中起作用吗?

BoostChronoTest.cpp

#undef

1 个答案:

答案 0 :(得分:-1)

简单地说,始终包括<gtest/gtest.h> <boost/chrono.hpp>之后:#define round ...不会影响推广代码