【发布时间】:2011-02-08 21:05:33
【问题描述】:
考虑以下代码:
template <typename T>
class B
{
};
template <typename T>
B<T> f(T& t)
{
return B<T>();
}
class A
{
class C {};
C c;
public:
A() {}
decltype(f(c)) get_c() const { return f(c); }
};
int main()
{
A a;
a.get_c();
}
当我尝试编译它时,我得到了错误:
test.cpp: In member function 'B<A::C> A::get_c() const':
test.cpp:31:46: error: conversion from 'B<const A::C>' to non-scalar type 'B<A::C>' requested
似乎在decltype中,编译器不知道这是一个const成员函数,因此c的类型为const C,结果错误地将f(c)的类型推断为@ 987654326@ 而不是 B<const C> 这才是真正的。
我做错了什么,或者这是一个编译器错误?我使用 gcc 4.6,但 4.4 和 4.5 表现出相同的行为。
【问题讨论】:
标签: c++ constants c++11 decltype