Tôi có đoạn mã sau:chuyển đổi ngầm và khai thác quá tải
struct helper {
template<typename T> helper(T const&);
};
helper operator*(helper const&);
struct A {};
int main() {
// (1)
A a;
sizeof(*a);
// (2)
int i;
sizeof(*i);
}
Trường hợp (1) biên dịch tốt và tôi hiểu rằng nó đang sử dụng chuyển đổi ngầm để loại helper
và quá tải toán tử nhất định.
Đối với trường hợp (2), tuy nhiên, tôi nhận được một lỗi biên dịch:
invalid type argument of unary '*' (have 'int')
Tại sao việc chuyển đổi ngầm sử dụng cho loại A
nhưng không phải cho int
?