c++ - 具有不完整类型模板重载的 SFINAE 在与 GCC 一起使用时不适用于 Clang
问题描述
我无法使用 Clang 编译以下代码段,而 GCC 没有问题:
template <typename T, int variant=0>
struct FooCallerWrapper;
template <typename T>
struct FooCallerWrapper<T, 0>
{
typedef int FooCallerType;
};
template<class SERVICE_T, int variant = 0>
class FooCaller
{
template<typename Dummy>
struct Void { typedef void type; };
template<typename R = void, typename Enabled = void>
struct EnableIfHasNextVariant { };
template<typename R>
struct EnableIfHasNextVariant<
R,
typename Void<typename FooCallerWrapper<SERVICE_T, variant+1>::FooCallerType>::type>
{
typedef R type;
};
};
FooCaller<int> foo;
我已经阅读了这个问题,但我不明白如何在我的情况下解决它。
我使用 Clang 3.1、8.0 和 10.0 以及 GCC 5.1 和 9.3 进行了测试。
解决方案
推荐阅读
- visual-studio - Visual Studio,CL.exe 退出,代码为 -1073741701
- amazon-dynamodb - dynamodb 上的结构应该如何?使用嵌套结构是否正确?
- c - 有没有办法在 C 中的预处理器或编译时检测 u8"" 文字?
- javascript - 为什么我不能直接用javascript更改```font-feature-settings```?
- r - 并排绘制两个 data.tree 对象
- apache-spark - 使用 Spark 和 spark-cassandra-connector 3.1.0 获取 NoClassDefFoundError
- c# - c#反射调用未知类型的委托方法
- javascript - AWS S3 如何只允许来自特定域的访问?
- c# - Microsoft Bot Framework 读取 Telegram Start 参数
- firebase - 使用 Flutter 监听 Firestore 中的变化