Ошибка g++-8.4.0: переполнение в константном выражении [-fpermissive]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка g++-8.4.0: переполнение в константном выражении [-fpermissive]

Сообщение Anonymous »

Я скомпилировал такую ​​программу в Ubuntu18.04 с g++8.4.0, параметры компиляции -fno-strict-overflow -fwrapv.

Код: Выделить всё

#include 
#include 
namespace _crypt {

// clang-format off
// compile-time seed
#define XSTR_SEED ((__TIME__[7] - '0') * 1ull    + (__TIME__[6] - '0') * 10ull  + \
(__TIME__[4] - '0') * 60ull   + (__TIME__[3] - '0') * 600ull + \
(__TIME__[1] - '0') * 3600ull + (__TIME__[0] - '0') * 36000ull)

// -----------------------------------------------------------------------------

// @return a pseudo random number clamped at 0xFFFFFFFF
constexpr unsigned long long linear_congruent_generator(unsigned rounds) {
return 1013904223ull + (1664525ull * ((rounds> 0) ? linear_congruent_generator(rounds - 1) : (XSTR_SEED) )) % 0xFFFFFFFF;
}

// -----------------------------------------------------------------------------

#define Random() linear_congruent_generator(10)
#define XSTR_RANDOM_NUMBER(Min, Max) (Min + (Random() % (Max - Min + 1)))

// -----------------------------------------------------------------------------

constexpr const unsigned long long XORKEY = XSTR_RANDOM_NUMBER(0, 0xFF);

// -----------------------------------------------------------------------------

template 
constexpr Char encrypt_character(const Char character, int index) {
return character ^ (static_cast(XORKEY) + index);
}

template 
class Xor_string {
public:
const unsigned _nb_chars = (size - 1);
Char _string[size];

// if every goes alright this constructor should be executed at compile time
inline constexpr Xor_string(const Char* string) : _string{} {
for (unsigned i = 0; i < size; ++i) _string[i] = encrypt_character(string[i], i);
}

// This is executed at runtime.
// HACK: although decrypt() is const we modify '_string' in place
const Char* decrypt() const {
Char* string = const_cast(_string);
for (unsigned t = 0; t < _nb_chars; t++) {
string[t] = string[t] ^ (static_cast(XORKEY) + t);
}
string[_nb_chars] = '\0';
return string;
}
};

}  // namespace _crypt

//#ifdef _XOR_STINRG_
#define XorS(name, my_string)    constexpr _crypt::Xor_string name(my_string)
#define XorString(my_string) []{constexpr _crypt::Xor_string expr(my_string); return expr; }().decrypt()

// Crypt normal string char*
#define _c( string ) XorString( string )

#define XorWS(name, my_string)       constexpr _crypt::Xor_string name(my_string)
#define XorWideString(my_string) []{ constexpr _crypt::Xor_string expr(my_string); return expr; }().decrypt()

// _crypt  wide characters
#define _cw( string ) XorWideString( string )

int main() {
static  std::string test_string = _c(R"(
fdaslkjdsfafjaksdljfa;lksdflajljffffffffffffffffasdfklasjdfkljaskdljfkl;asjdf;aljdsf;kljasdklfjklsadjfklasdjkl;fjasdkl;dfj;lkasdjf;lkasdjf;lkjasd;klfjldsjf;kljasdklfjklsadjfklasdjkl
sdjf;lkasjdfkl;ajsd;lkfjaskl;djf;klasjdf;lkajsdlkfjal;sdkjfkl;asdjrfioqwejhotpiqhntg;lsadnvclmkasdhjdo;fijasd;lkfja;wlkjetpoiquropiqwejrlsjfaadlkjfoiqawhghsngb;lkasewriopqweujtophkjzdnvlkzxdnlkfahsjeftoipwqhytpoiqwhngfkjsafbgfnkljasjf;laksddjfopiqaweehtgoasnfd;laksddjfopiqaweehtgoasnfdldsfj;alskeeurtpoiqwe
kdjsf;lokasudtrfiopqweujtpoiqu;lqwekngsadndfl;ksadjvb;lkasujropiwqehjrtpoiwqethgl;knf;lkasvnv;lkanss;dletrjwioqeurpoqweujrpowqejtojsdfa;ljf
)");
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79130211/g-8-4-0-error-overflow-in-constant-expression-fpermissive[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»