【发布时间】:2018-09-23 16:12:34
【问题描述】:
我尝试为struct Node 中的一个方法定义两个“重载”,这取决于结构模板参数调用不同的行为。
我知道我可以使用其他方法(例如 if constexpr 或其他方法)..
我担心的是我“欺骗”了 gcc 9.0.0 实验版 20180919 来编译它,但 wandbox 中可用的所有其他最新编译器(下面的永久链接)都没有。我想 gcc8 和 clang6/7 在这里做对了吗?
感谢您的帮助!
#include <iostream>
#include <type_traits>
enum laziness { lazy, nonlazy };
enum logic { AND, OR };
template<laziness LA, logic LO>
struct Node{
template<typename = void>
std::enable_if_t<LA==lazy> printLaziness () const {
std::cout << "lazy" << std::endl;
}
template<typename = void>
std::enable_if_t<LA==nonlazy> printLaziness () const {
std::cout << "non-lazy" << std::endl;
}
};
int main () {
Node<lazy, AND> x{};
x.printLaziness();
Node<nonlazy, OR> y{};
y.printLaziness();
}
【问题讨论】:
标签: c++ templates gcc enable-if