相关疑难解决方法(0)

如果包是空的,是否在可变参数包类型上执行替换?

考虑以下程序:

#include <type_traits>

enum class dummy {};
template <typename T>
using EnableIf = typename std::enable_if<T::value, dummy>::type;
template <typename T>
using DisableIf = typename std::enable_if<!T::value, dummy>::type;

template <typename T>
struct dependent_true_type : std::true_type {};

template <typename T,
          EnableIf<dependent_true_type<T>>...>
std::true_type f();
template <typename T,
          DisableIf<dependent_true_type<T>>...>
std::false_type f();

static_assert(decltype(f<int>())::value, "");

int main() {}
Run Code Online (Sandbox Code Playgroud)

GCC 4.7 glady接受这个程序.我最近的clang 3.1 build声称呼叫f是模棱两可的.

test.c++:22:24: fatal error: call to 'f' is ambiguous
static_assert(decltype(f<int>())::value, "");
                       ^~~~~~
test.c++:17:16: note: candidate function [with T = int, $1 = <>]
std::true_type …
Run Code Online (Sandbox Code Playgroud)

c++ g++ clang sfinae c++11

9
推荐指数
1
解决办法
615
查看次数

标签 统计

c++ ×1

c++11 ×1

clang ×1

g++ ×1

sfinae ×1