LINUX.ORG.RU

История изменений

Исправление wota, (текущая версия) :

~$ cat 1.cpp
#include <cstdint>

struct Int
{
    constexpr Int( int n ) : n_( n > 100 ? (intptr_t) "n > 100!!!11" : n ) {}
    int n_;
};

int main()
{
    constexpr Int n1( 10 ); // OK
    constexpr Int n2( 200 ); // Fail
}

~$ g++ -std=c++11 1.cpp
1.cpp: In function ‘int main()’:
1.cpp:14:27: error: ‘const Int{((int)((long int)"n > 100!!!11"))}’ is not a constant expression
     constexpr Int n2( 200 ); // Fail
                           ^

вот проверка, которая сработает при компиляции, а у тебя молча все компилируется

Исправление wota, :

~$ cat 1.cpp
#include <cstdint>

int x = 1;

struct Int
{
    constexpr Int( int n ) : n_( n > 100 ? (intptr_t) "n > 100!!!11" : n ) {}
    int n_;
};

int main()
{
    constexpr Int n1( 10 ); // OK
    constexpr Int n2( 200 ); // Fail
}

~$ g++ -std=c++11 1.cpp
1.cpp: In function ‘int main()’:
1.cpp:14:27: error: ‘const Int{((int)((long int)"n > 100!!!11"))}’ is not a constant expression
     constexpr Int n2( 200 ); // Fail
                           ^

вот проверка, которая сработает при компиляции, а у тебя молча все компилируется

Исходная версия wota, :

~$ cat 1.cpp
#include <cstdint>

struct Int
{
	constexpr Int( int n ) : n_( n > 100 ? (intptr_t) "n > 100!!!11" : n ) {}
	int n_;
};

int main()
{
	constexpr Int n1( 10 ); // OK
	constexpr Int n2( 200 ); // Fail
}

~$ g++ -std=c++11 1.cpp
1.cpp: In function ‘int main()’:
1.cpp:14:24: error: ‘const Int{((int)((long int)"n > 100!!!11"))}’ is not a constant expression
  constexpr Int n2( 200 ); // Fail

вот проверка, которая сработает при компиляции, а у тебя молча все компилируется