Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
// Non-constant constant-expressions in C++
// http://b.atch.se/posts/non-constant-constant-expressions/
// The Implementation
constexpr int flag (int);
template<class Tag>
struct writer {
friend constexpr int flag (Tag) {
return 0;
}
};
template<bool B, class Tag = int>
struct dependent_writer : writer<Tag> { };
template<
bool B = noexcept (flag (0)),
int = sizeof (dependent_writer<B>)
>
constexpr int f () {
return B;
}
int main () {
constexpr int a = f ();
constexpr int b = f ();
static_assert (a != b, "fail");
}
Note: clang incorrectly shows the wrong behavior, a workaround is available in the appendix.
Для template-constexpr-метапрограммистов на C++ наверняка уготован специальный ад, в котором пытки будут начинаться на этапе компиляции в очереди на поступление в runtime-ад.
How to implement a constant-expression counter in C++
как вы это говно понимаете?