ile çift parantez gerekiyorsa Ben güçlü bir yazılan enum temel türünü doğrulamak için std::is_same
kullanmaya çalışıyordum ve çift parantez kullanmak gerektiğinde garip bir durum fark ettim, ama neden anlamıyorum . Ben aşağı aşağıdaki gibi hiç örnek azalttık:Neden std :: is_same
#include <type_traits>
#include <cassert>
#include <stdint.h>
int main(int argc, char *argv[])
{
assert((std::is_same<unsigned int,uint32_t>::value == true)); // OK
assert((std::is_same<unsigned int,uint32_t>::value) == true); // OK
//assert(std::is_same<unsigned int,uint32_t>::value == true); // Compile error
static_assert(std::is_same<unsigned int,uint32_t>::value == true, "BAD"); // OK
return 0;
}
Derleme hatası:
isSameAssert.cpp:9:62: error: macro "assert" passed 2 arguments, but takes just 1
assert(std::is_same<unsigned int,uint32_t>::value == true); // Compile error
^
isSameAssert.cpp: In function ‘int main(int, char**)’:
isSameAssert.cpp:9:5: error: ‘assert’ was not declared in this scope
assert(std::is_same<unsigned int,uint32_t>::value == true); // Compile error
^
make: *** [build/isSameAssert] Error 1
kimse bu açıklamaya ya da beni yapan bir referansa işaret? assert
bir makro olduğunu
Çünkü, 'assert() 'bir makrodur. –