Considerando il seguente codice:due risultati diversi su GCC 4.6 e 4.7 per i template deduzione
#include <iostream>
#include <vector>
#include <array>
#include <type_traits>
// Version A
template<typename T>
void f(const T& x)
{
std::cout<<"Version A"<<std::endl;
}
// Version B
template<typename... T1, template<typename...> class T>
void f(const T<T1...>& x)
{
std::cout<<"Version B"<<std::endl;
}
// Version C
template<typename T1 = double, typename TN = size_t, template<typename, TN...> class T, TN... N>
void f(const T<T1, N...>& x)
{
std::cout<<"Version C"<<std::endl;
}
// Main
int main(int argc, char* argv[])
{
f(double());
f(std::vector<double>());
f(std::array<double, 3>());
return 0;
}
GCC 4.6.2 su Windows dà:
Version A
Version B
Version C
e GCC 4.7.1 su Linux dà :
Quindi la domanda è: PERCHE '? Si tratta di un bug o di un comportamento non definito? Devo postarlo sul bug report di GCC?
non era questo ha chiesto prima di oggi? – Gorpik
La rimozione di '= size_t' lo corregge. – Pubby
@Gorpik: era approssimativamente lo stesso codice, ma non per la stessa domanda/ragione. – Vincent