【发布时间】:2015-02-03 20:58:12
【问题描述】:
我在课堂上有两个模板运算符:
template<class T>
size_t operator()(const T& t) const {
static_assert(boost::is_pod<T>(), "Not a POD type");
return sizeof t;
}
template<typename... T>
size_t operator()(const boost::variant<T...>& t) const
{
return boost::apply_visitor(boost::bind(*this, _1), t);
}
我将boost::variant<some, pod, types, here> 作为参数传递给这些运算符。 GCC 4.8 和 llvm 6.0 可以很好地编译代码,选择 boost::variant 参数化运算符。 gcc 4.7 选择了const T& t 参数化运算符,因此由于静态断言而无法编译。
那么,我有一个问题,在这两者之间进行选择的规则是什么? 我认为 gcc 4.7 肯定有 bug,但我没有任何证据。
【问题讨论】: