#include <iostream>
#include <type_traits>
template<typename T>
constexpr typename std::remove_reference<T>::type makeprval(T && t) {
return t;
}
#define constexpr_or_zero(e) (noexcept(makeprval(e)) ? (e) : 0)
const int cvalue = 7;
int ivalue = 7;
using type1 = std::integral_constant<int, constexpr_or_zero(cvalue)>;
using type2 = std::integral_constant<int, constexpr_or_zero(ivalue)>;
int main() {
std::cout << "type1::value is " << type1::value << '\n';
std::cout << "type2::value is " << type2::value << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiAKY29uc3RleHByIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSBtYWtlcHJ2YWwoVCAmJiB0KSB7CiAgcmV0dXJuIHQ7Cn0KCiNkZWZpbmUgY29uc3RleHByX29yX3plcm8oZSkgKG5vZXhjZXB0KG1ha2VwcnZhbChlKSkgPyAoZSkgOiAwKQoKY29uc3QgaW50IGN2YWx1ZSA9IDc7CmludCBpdmFsdWUgPSA3OwoKdXNpbmcgdHlwZTEgPSBzdGQ6OmludGVncmFsX2NvbnN0YW50PGludCwgY29uc3RleHByX29yX3plcm8oY3ZhbHVlKT47CnVzaW5nIHR5cGUyID0gc3RkOjppbnRlZ3JhbF9jb25zdGFudDxpbnQsIGNvbnN0ZXhwcl9vcl96ZXJvKGl2YWx1ZSk+OwoKaW50IG1haW4oKSB7CglzdGQ6OmNvdXQgPDwgInR5cGUxOjp2YWx1ZSBpcyAiIDw8IHR5cGUxOjp2YWx1ZSA8PCAnXG4nOwoJc3RkOjpjb3V0IDw8ICJ0eXBlMjo6dmFsdWUgaXMgIiA8PCB0eXBlMjo6dmFsdWUgPDwgJ1xuJzsKfQ==