Doxygen错误:找到';'在解析初始化列表时

时间:2016-10-09 11:56:12

标签: c++ c++11 doxygen

Doxygen 1.8.11对以下定义感到窒息,我尽可能地简化了这个定义而不会丢失警告信息:

template <class T>
struct MySpecialization<T, void_t<decltype(std::declval<T>().foo(
                             std::declval<double>()))>> : std::true_type {};

警告是:

warning: Found ';' while parsing initializer list! (doxygen could be confused by a macro call without semicolon)

有趣的是,Doxygen可以满足以下要求:

template <class T>
struct MySpecialization<T, void_t<decltype(std::declval<T>().foo())>> : std::true_type {};

基本上是相同的定义而没有foo的参数。

我非常感谢一种解决方法。在最坏的情况下,我想以某种方式导致Doxygen忽略这个定义。

2 个答案:

答案 0 :(得分:2)

答案在docs。使用doxygen的\cond\endcond命令或使用预处理器定义。

/// \cond NOPE
template <class T>
struct MySpecialization<T, void_t<decltype(std::declval<T>().foo(
                             std::declval<double>()))>> : std::true_type {};
/// \endcond

使用预处理器定义,您可以添加Doxygen友好的定义。例如,Qt项目就是这样做的。

#ifdef DOXYGEN_WORKING
template <class T>
struct MySpecialization<T, something_that_doxygen_understands> : std::true_type {};
#else
template <class T>
struct MySpecialization<T, void_t<decltype(std::declval<T>().foo(
                             std::declval<double>()))>> : std::true_type {};
#endif

并将PREDEFINED = DOXYGEN_WORKING添加到配置文件中。

答案 1 :(得分:2)

我刚刚在GitHub中针对此问题提供了修复,请参阅https://github.com/doxygen/doxygen/commit/985faf287233badf65fa33d21bde17afa6970d60