ce qui suit me donne une instanciation de modèle ambigu avec nvcc (combinaison d'EDG front-end et g ++). Est-ce vraiment ambigu ou le compilateur est-il mauvais? Je posterai aussi la solution à boost :: enable_ifC++ instanciation de modèle ambigu
template<typename T> struct disable_if_serial { typedef void type; };
template<> struct disable_if_serial<serial_tag> { };
template<int M, int N, typename T>
__device__
//static typename disable_if_serial<T>::type
void add_evaluate_polynomial1(double *R,
const double (&C)[M][N], double x,
const T &thread) {
// ...
}
template<size_t M, size_t N>
__device__
static void add_evaluate_polynomial1(double *R,
const double (&C)[M][N], double x,
const serial_tag&) {
for (size_t i = 0; i < M; ++i)
add_evaluate_polynomial1(R, C, x, i);
}
// ambiguous template instantiation here.
add_evaluate_polynomial1(R, C, x, serial_tag());
J'ai testé votre code sur Clang et GCC. Les deux l'acceptent. Donc, je soupçonne un bug dans Comeau. –
@Johannes merci, en fait il y avait un problème de ma part, les paramètres 'int' et' size_t 'cause l'ambiguïté, comme l'a souligné @jpa. G ++ a également accepté ce modèle sur mon système sans se plaindre. – Anycorn