static_assert & g++ v 4.8.4

Odpowiedz Nowy wątek
2016-08-08 10:37

Rejestracja: 3 lata temu

Ostatnio: 3 lata temu

0

Mam problem z użyciem

static_assert

o to fragment kodu:


template <typename T1, typename T2>
class Unit
{
        T1 papryka;
        T2 rower;
    public:
        Unit(T1 p, T2 r) : papryka(p), rower(r)
        {
    static_assert(sizeof(int)!=sizeof(int), "LOL"); //TUTAJ!
        }

        T2 fun2();
T1 fun()
{
        cout<<sizeof(T1)<<endl;
}

};

template<typename T1, typename T2>
T2 Unit<T1,T2>::fun2()
{
        cout<<sizeof(T2)<<endl;
}

Blad zglaszany przez kompilator gcc v 4.8.4:


cp4.cpp: In constructor ‘Unit<T1, T2>::Unit(T1, T2)’:
cp4.cpp:15:47: error: there are no arguments to ‘static_assert’ that depend on a template parameter, so a declaration of ‘static_assert’ must be available [-fpermissive]
static_assert(sizeof(int)!=sizeof(int), "LOL");
                                               ^
cp4.cpp:15:47: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)

Czy ktoś wie czym spowodowany jest ten błąd?

Pozostało 580 znaków

kq
2016-08-08 10:43
kq
Moderator C/C++

Rejestracja: 7 lat temu

Ostatnio: 3 godziny temu

Lokalizacja: Szczecin

Wygląda jakbyś kompilował bez -std=c++11 lub -std=c++1y


Pozostało 580 znaków

2016-08-08 11:12

Rejestracja: 12 lat temu

Ostatnio: 3 minuty temu

0

A przeczytałeś zgłaszany komunikat błędu. Wyraźnie mówi w czym jest problem.

static_assert(sizeof(p)!=sizeof(r), "LOL"); //

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
Jak dla mnie nie mówi wyraźnie. Komunikat mówi "nie widzę takiej funkcji, może chciałeś odłożyć jej szukanie na czas konkretyzacji szablonu, ale nie robię tego bo nie zależy od jego parametrów w żaden sposób", a od C++11 static_assert nie może być legalną nazwą funkcji bo stało się słowem kluczowym. - kq 2016-08-08 13:19

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0