#include <tuple>
template<int I>
struct A {};
template<int I, typename... T>
void f(A<I>, std::tuple<T *...>) {}
template<typename... T>
void f(A<0>, std::tuple<T *...>) {}
int main()
{
f(A<0>{}, std::tuple<char*, int*, float*>{});
}
f
ikinci aşırı yükü daha fazla uzman değil mi? g ++ 4.9.2, çağrının belirsiz olduğunu söyler, argo 3.6.0 bunu kabul eder. Hangi derleyici doğru?`void f (A <I>, tuple <T *...>)` dan daha özel değil (A <0>, tuple <T *...>) `` dır?
std::tuple<T *...>
'u std::tuple<T...>
olarak değiştirirseniz, g ++ bununla iyi anlaşılamıyor, ki bu anlamadım.
MSVC 2013 de bununla mutlu :) –
Gcc'nin yanlış olduğunu düşündüğümden şüpheliyim, ama değer şablon parametreleriyle ilgili bir şey belirsiz olabilir (standart, etrafta ilginç olma eğilimindedir). Değer kullanmadan repo alabilir misin? – Yakk
[clang] (http://clang.llvm.org) da kod ile tamam. Türleri kullanarak –