1

我有一个非常简单的函数,它只会返回 QVariant 的值。它是返回私有 QVariant 数据值的类的一部分:

template <typename T>
QVariantReference<T>::operator T() const
{
    return this->data.value<T>();
}

如果我使用 MSVC2013 编译器进行编译,它可以正常工作,但如果我尝试使用 MinGW 执行此操作,则会收到以下错误:

C:\C++Libraries\Qt\workplace\QXmlDataSaver\QXmlDataSaver\qxmldatasaver.h:34: Fehler: '>' 标记之前的预期主表达式
return this->data.value<T>();

我已经检查了 QVariant-Documentation 但没有关于编译器关于此函数的提示。我可以QVariant::value<T>()毫无问题地调用非模板函数。

任何人都知道原因可能是什么?或者这是 MinGW 的正常行为?谢谢你的帮助。

4

1 回答 1

2

你必须告诉编译器value是一个成员模板。默认情况下,它不会假定它是,而是将第一个解析<为小于运算符。MSVC 实际上无视该规则并且不符合标准。

template <typename T>
QVariantReference<T>::operator T() const
{
    return this->data.template value<T>();
}
于 2014-09-25T22:50:16.103 回答