2017-09-22 1 views
3

Je mets à jour mon Xcode vers la version 9 et tombe pour construire mon application contenant le framework Tensorflow. Il semble que le code suivant:Xcode 9 tombe pour construire une spécialisation de template partielle en C++

#ifndef Header_h 
#define Header_h 
template<class T1, class T2, int I> class A {}; // primary template 

template<class T1, int I, class T2> class A<T1, T2, I> {}; //error 
#endif /* Header_h */ 

sera rejeté par Xcode 9 avec le message d'erreur « spécialisation du modèle partiel n'est pas plus spécialisé que modèle primaire ». Mais en Xcode 8.3.3 et en studio visuel, c'est bien.

Voici le code tensorflow d'origine: (TensorStorage.h)

template<typename T, typename Dimensions, int Options_> class TensorStorage; 


// Pure fixed-size storage 
template<typename T, int Options_, typename FixedDimensions> 
class TensorStorage<T, FixedDimensions, Options_> 
{ 
    //implementation 
}; 

// pure dynamic 
template<typename T, int Options_, typename IndexType, int NumIndices_> 
class TensorStorage<T, DSizes<IndexType, NumIndices_>, Options_> 
{ 
    //implementation 
}; 

Merci

Répondre

2

Je viens de répondre à ma propre question maintenant. Je pense que c'est peut-être le problème du compilateur. J'ai déjà envoyé l'incident de support technique à Apple, mais actuellement je trouve une solution sale. Modifier le code d'origine:

template<typename T, typename Dimensions, int Options_> class TensorStorage; 
// Pure fixed-size storage 
template<typename T, int Options_, typename FixedDimensions> 
class TensorStorage<T, FixedDimensions, Options_> 
{ 
    //implementation 
}; 

// pure dynamic 
template<typename T, int Options_, typename IndexType, int NumIndices_> 
class TensorStorage<T, DSizes<IndexType, NumIndices_>, Options_> 
{ 
    //implementation 
}; 

Pour:

template<typename T, typename FixedDimensions, int Options_> //class TensorStorage; 
// Pure fixed-size storage 
//template<typename T, int Options_, typename FixedDimensions> 
class TensorStorage//<T, FixedDimensions, Options_> 
{ 
    //implementation 
}; 

// pure dynamic 
template<typename T, int Options_, typename IndexType, int NumIndices_> 
class TensorStorage<T, DSizes<IndexType, NumIndices_>, Options_> 
{ 
    //implementation 
}; 

Le code est sale maintenant, mais cela fonctionne. Laissez simplement la première implémentation être un modèle primaire explicite. Je vais attendre la réponse d'Apple.

+0

Merci, cette solution temporaire a fonctionné pour moi. –

6

Cela m'a donné un autre message d'erreur. J'ai trouvé une autre solution qui a fonctionné ainsi:

j'ai changé la ligne 34 TensorStorage.h de

template<typename T, typename Dimensions, int Options_> class TensorStorage; 

à

+0

Nice, merci. – wtiandong