Передача анонимной переменной по ссылке

Стандартные типы C ++, такие как int или char, имеют ctors, поэтому вы можете иметь такие выражения:

int a = int(67); // create anonymous variable and assing it to variable a
int b(13);       // initialize variable b
int(77);         // create anonymous variable

Пользовательские типы (структуры или классы) могут делать то же самое:

struct STRUCT
{
  STRUCT(int a){}
};

STRUCT c = STRUCT(67);
STRUCT d(13);
STRUCT(77);

Вопрос в том, почему мы можем передавать по ссылке анонимную структуру или экземпляры классов, но не можем передавать стандартные типы?

struct STRUCT
{
  STRUCT(int a){}
};

void func1(int& i){}
void func2(STRUCT& s){}
void func3(int i){}
void func4(STRUCT s){}

void main()
{
  //func1(int(56));  // ERROR: C2664
  func2(STRUCT(65)); // OK: anonymous object is created then assigned to a reference
  func3(int(46));    // OK: anonymous int is created then assigned to a parameter
  func4(STRUCT(12)); // OK: anonymous object is created then assigned to a parameter
}

Ответы на вопрос(3)

Ваш ответ на вопрос