this test program Verilen:Neden bu "çağrı" sadece bir tanesi yerine iki argüman görmeyi iddia ediyor?
#include <cassert>
#include <string>
#include <type_traits>
const std::string& const_string = "bla";
std::string const & string_const = "blabla";
static_assert(std::is_same<decltype(const_string), decltype(string_const)>::value, "Uhoh");
int main()
{
assert(std::is_same<decltype(const_string), decltype(string_const)>::value);
}
iki tip C'nin assert kullanarak derleme sırasında ve çalışma zamanında aynı olduğunu iddia Hangi. Clang, MSVC2015 ve GCC tümü aynı hatayı bildirmek, bu yüzden it's me eminim:
main.cpp:13:49: error: too many arguments provided to function-like macro invocation
assert(std::is_same<decltype(const_string), decltype(string_const)>::value);
^
/usr/include/assert.h:91:10: note: macro 'assert' defined here
# define assert(expr) \
^
Sadece assert
içinde iki argüman göremiyorum. Dahası, static_assert
sadece iyi çalışıyor ... Peki burada neler oluyor?
Önişlemcinin iki "karşılaştırmayı" gördüğüne inanıyorum; std :: is_same :: değer '. Önişlemcinin, olmadıklarını söylemesi için bir yolu yoktur. –
molbdnilo
** static_assert ** bir önişlemci makrosu ** bir ** anahtar kelimedir. Önişlemci makroları, akıllı olmayan bir şekilde ',' argümanlarını böler. Ek parantez bunu engeller. – Youka