Daha iyi bir başlık bulamadım, ancak doğru fikre sahipseniz bunu değiştirmek için çekinmeyin. Olduğu gibi, GCC vs clang zaten daha iyidir.Variadic şablonlar ve işlevler 'işaretçiler: hangi derleyici doğru?
Bu kodda neyin yanlış olduğunu anlamaya çalışıyorum:
template <typename... T>
struct S;
template <typename T, typename... U>
struct S<T, U...>: S<U...> {
using S<U...>::f;
template<void(*F)(const T &)>
void f() { }
};
template<>
struct S<> {
void f();
};
template<typename... T>
struct R: S<T...> {
using S<T...>::f;
template<typename U, void(*F)(const U &)>
void g() {
this->template f<F>();
}
};
void h(const double &) { }
int main() {
R<int, double> r;
r.g<double, h>();
}
O ile GCC 4.9 (here bakınız) derler, ama clang 3.8 ile derleme değil .0 (bkz. here). Hangi derleyici
sağ ve neden?
Ayrıca, hem derleyicilerle derleme kodunu görmek için ne yapabilirim?
(hala test) ve şimdi i sorusuna bayrak "variadic-şablonları" add önerebilirsiniz. – Radek
Bu ICC de bunu derlemek için başarısız görünüyor: https: //godbolt.org/g/N67e2z – NathanOliver
Belki bu soru ile ilgili olabilir (http://stackoverflow.com/questions/8629839/c-candidate-template-ignored -doğru-açık-belirtilen-argüman-için-templ) veya [bu soru] (http://stackoverflow.com/questions/33872039/invalid-explicitly-specified-argument-in-clang-but-successful-compilation-in GCC)? – callyalater