次のコードは、VC++ Nov 2012 CTP でコンパイルされています。
#include <iostream>
using namespace std;
struct A
{
A(int n)
{
cout << n << endl;
}
};
void f(A)
{}
int main()
{
A {8}; // OK. A::A(8); is called;
cout << typeid(decltype(A {8})).name() << endl; // Output 'struct A'
f(A {8}); // error C2275: 'A' : illegal use of this type as an expression
}
Q1: f(A {8}); はなぜですか? 合法ではない?
Q2: A {8} が A のインスタンスとして扱われないのはなぜですか?
アップデート:
この問題は、VC++ Nov 2012 CTP のバグのようです。