Heisenbug, где static_assert выполняется, но вызывает другой static_assertC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Heisenbug, где static_assert выполняется, но вызывает другой static_assert

Сообщение Anonymous »

Я прикрепил к этому минимальному примеру кода странную ошибку компиляции:

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

#include 
#include 
struct A {
class iterator {
private:
int i = 0; // compiles if "= 0" removed

public:
using value_type = bool;                 // compiles if line removed
using difference_type = std::ptrdiff_t;

iterator() = default; // compiles if replaced by iterator(){}
iterator(int i) : i(i) {}

bool operator*() const { return false; } // compiles if line removed
iterator &operator++() { return *this; }
iterator operator++(int) { return *this; }

bool operator==(const iterator &other) const = default; // compiles if line removed
};
static_assert(std::weakly_incrementable); // compiles if line removed
};
static_assert(std::is_constructible_v);

int main() {
return 0;
}
Я отметил 6 строк в этом коде, где каждое изменение строки, если оно изменено само по себе, как описано в комментарии, позволяет компилировать. Вероятно, это ошибка компилятора или даже множество ошибок компилятора, но точно такое же поведение наблюдается в gcc 14.2 и clang 21.0.0, поэтому я не совсем уверен.
Может быть, кто-нибудь может объяснить некоторые наблюдаемые особенности поведения в отношении этих закомментированных строк?
У меня такое чувство, что это может быть каким-то образом связано с этим, но тот факт, что эти другие несвязанные изменения строк позволяют снова компилировать, очень странен.

Подробнее здесь: https://stackoverflow.com/questions/798 ... tic-assert
Ответить

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

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

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

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

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