Doxygen error: Found ';' while parsing initializer list
Doxygen error: Found ';' while parsing initializer list
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 忽略这个定义。
答案就在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
添加到您的配置文件。
我刚刚在 GitHub 中提交了针对此问题的修复,请参阅 https://github.com/doxygen/doxygen/commit/985faf287233badf65fa33d21bde17afa6970d60
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 忽略这个定义。
答案就在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
添加到您的配置文件。
我刚刚在 GitHub 中提交了针对此问题的修复,请参阅 https://github.com/doxygen/doxygen/commit/985faf287233badf65fa33d21bde17afa6970d60