Если ваш MINTINT
равен typedef int MYINT
, то MYINT()
не является функцией, но равен int()
, что является инициализацией по умолчанию, эквивалентной int y = 0
или int y = int(0)
.
Ваша вторая строка, т.е. cout << MYINT()
правильно компилируется для меня с g++ -Wall -ansi -pedantic
по той же причине.
Но g++
будет жаловаться на sizeof
со следующей ошибкой error: invalid application of "sizeof" to a function type
, поскольку она интерпретирует MYINT()
как "вызов конструктора по умолчанию для int" ( EDIT : это не так правильно) «тип функции, возвращающий MYINT, который не разрешен» ( EDIT : это правильный ответ, см. Майк). Но это не имеет ничего общего с typedef
.
Резюме:
#include <iostream>
typedef int myint;
int main()
{
int y = myint();
int z = myint(0);
std::cout << y << z; // Will output 0 0
std::cout << std::endl << myint(0) << myint(); // Will output 0 0
std::cout << sizeof(int()); // The error is here; same with sizeof(myint())
}
Редактировать (снова)
Как сказано в комментарии, строки cout
не работают для вас, это потому, что вы, вероятно, забыли include <iostream>
.
Редактировать
Посмотрите также ответ Майка Сеймура для объяснения двусмысленности с sizeof
.