lang警告:-省略号

时间:2018-11-18 07:55:09

标签: c++ macros variadic-templates

实现is_function时,我尝试使用宏手动枚举每种情况:

#define ImplIsFun(QUALIFIERS) \
    template<typename R, typename... Args> \
    struct is_function<R(Args...) QUALIFIERS> : public true_ \
    {}; \
    template<typename R, typename... Args> \
    struct is_function<R(Args... COMMA...) QUALIFIERS> : public true_ \
    {};

    // clang-format off
    ImplIsFun()
    ImplIsFun(const)
    ImplIsFun(&)
    ImplIsFun(&&)
    ImplIsFun(volatile)
    ImplIsFun(noexcept)
    ImplIsFun(const volatile)
    ImplIsFun(const &)
    ImplIsFun(const &&)
    ImplIsFun(const noexcept)
    ImplIsFun(volatile &)
    ImplIsFun(volatile &&)
    ImplIsFun(volatile noexcept)
    ImplIsFun(const volatile &)
    ImplIsFun(const & noexcept)
    ImplIsFun(const && noexcept )
    ImplIsFun(const volatile &&)
    ImplIsFun(const volatile noexcept)
    // clang-format on

并发生警告:

../include/rider/faiz/type_traits.hpp:315:2: warning: '...' in this location creates a C-style
      varargs function [-Wambiguous-ellipsis]
        ImplIsFun(const &&)
        ^~~~~~~~~~~~~~~~~~~

https://clang.llvm.org/docs/DiagnosticsReference.html#wambiguous-ellipsis

  

默认情况下启用此诊断。

     

诊断文字:

     

警告:‘…’在此位置创建C样式的varargs函数,而不是函数参数包

因此,C风格的varargs可能与模板可变参数冲突。有什么解决方法/解决方案(也欢迎使用boost.preprocessor,hana或其他代码生成器库)?

0 个答案:

没有答案