//typedef unsigned short wchar_t --> konflikte



  • Unter Windows beim verwenden des Intel 10.1 compilers wchar_t lediglich ein typedef auf unsigned short. zumindest zeigt mir das VA an:

    typedef unsigned short wchar_t

    Nun verwende ich folgende Klasse, die mir letztlich die limits verschiedener PODs und eine weitere, die mir die inf Werte wiedergibt. Der Sinn sei jetzt erstmal dahin gestellt. Wie geht man jetzt vor, um die Fehlermedlung: "Spezialisierung ist für unsigned short bereits vorhanden" zu umgehen? Möglichst OHNE #ifdefs...

    mynamespc{
    template<>
    struct UbLimits<wchar_t>
    {
       //return largest possible positive wchar_t value
       static inline wchar_t inf () { return std::numeric_limits<wchar_t>::max(); }
    };
    template<>
    struct UbLimits<wchar_t>
    {
       //return largest possible positive wchar_t value
       static inline unsigned short inf () { return std::numeric_limits<unsigned short>::max(); }
    };
    class UbInfinity 
    {
     public:
       inline UbInfinity() {}
       inline operator wchar_t()        const  { return UbLimits<wchar_t>::inf();        }
       inline operator unsigned short() const  { return UbLimits<unsigned short>::inf(); }
    ...
    }; 
    
    UbInfinity inf;
    };
    
    int main()
    {
      wchar_t      a = mynamespc::inf;
      unsigned int b = mynamespc::inf;
    }
    


  • Einen halbwegs standardkonformen Kompiler verwenden? Sogar Microsofts Komiler hat eine Option um wchar_t als Built-in Typen zu behandeln (die tatsächlich als Standard eingeschaltet ist). Entweder dein Kompiler hat ebenfalls so eine Option (ich gehe stark davon aus), oder du besorgst dir, wenn möglich einen neuen.

    Gruß
    Don06



  • namespace mynamespc
    {
        template<typename T>
        struct UbLimits
        {
            static inline T inf() { return 0; }
        };
    
        template<>
        struct UbLimits<wchar_t>
        {
           //return largest possible positive wchar_t value
           static inline wchar_t inf () { return std::numeric_limits<wchar_t>::max(); }
        };
    
        template<>
        struct UbLimits<unsigned short> // hier aufpassen!?
        {
            //return largest possible positive wchar_t value
            static inline unsigned short inf () { return std::numeric_limits<unsigned short>::max(); }
        };
    
        struct UbInfinity
        {
            inline operator wchar_t() const { return UbLimits<wchar_t>::inf();        }
            inline operator unsigned short() const { return UbLimits<unsigned short>::inf(); }
        } inf;
    };
    

    sollte eigtl. gehen 😉



  • okay, hatte bisher noch keinerlei berührung mit wchar_t... aber es muss tatsächlich ein switch gesetzt werden, wie dämlich, aber okay.

    @(D)Evil: und bis auf das mit der struct, habe ich es genauso in meinem code vorliegen, die allgemeine template definition hatte ich hier nur nicht angegeben 🙂

    Edit: aber der switch läßt ihn völlig unberührt... /Zc:wchar_t sollte es sein, der eigentlich auch schon so in den Einstellungen aktiviert wird... aaargh
    Edit2: okay, war ein bug im intel compiler für MSVC... nach nem udpdate macht er brav was er soll ver 10.1.020 läuft 10.1.011 nicht 😞


Anmelden zum Antworten