template <typename Sig>
struct IFoo { virtual Sig operator() = 0; }; // XXX, but OK with non-templated aliases...
编译器正在处理
Sig
作为实例化之前的非函数类型,我想我只是在寻找一种方法来强制系统放弃对该类型的早期信念。这是不可能的,还是我还没有偶然发现正确的语法?
我明确希望避免通常的专业化归纳推理:
template <typename Sig> struct IFoo;
template <typename R, typename... Args>
struct IFoo<R(Args...)> { virtual R operator()(Args...) = 0; };
template <typename R, typename... Args>
struct IFoo<R(Args...) const> { virtual R operator()(Args...) const = 0; };
const
沿着
noexcept
template <typename Sig> struct IBar;
template <typename R, typename... Args, bool IsNoExcept>
struct IBar<R(Args...) noexcept(IsNoExcept)> {
virtual R operator()(Args...) noexcept(IsNoExcept) = 0;
};
不幸的是我被困在C++ 14中,但是没有魔法。
if constexpr