error: C2139: 'QString': an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_convertible_to'
-
wrote on 17 Jul 2023, 15:07 last edited by
Hi Everybody, This is my first post on this forum. Forgive me if it's a repeat post. I am using Qt6.5 with Visual Studio 2022. I am trying to build an old piece of code in Qt Creator. There is no issue with any source file of the code. But I am getting this error.
"error: C2139: 'QString': an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_convertible_to'"Full details.
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\type_traits:334: error: C2139: 'QString': an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_convertible_to'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\type_traits(334): error C2139: 'QString': an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_convertible_to'
C:\Qt\6.5.1\msvc2019_64\include\QtCore/qstringview.h(22): note: see declaration of 'QString'
C:\Qt\6.5.1\msvc2019_64\include\QtCore/qanystringview.h(82): note: see reference to class template instantiation 'std::is_convertible<QStringTokenizerBaseBase::tokenizer_state &,QString>' being compiled
C:\Qt\6.5.1\msvc2019_64\include\QtCore/qanystringview.h(82): note: see reference to variable template 'const bool conjunction_v<std::negation<std::disjunction<std::is_same<QStringTokenizerBaseBase::tokenizer_state,enum QAnyStringView::Tag>,std::is_sameQStringTokenizerBaseBase::tokenizer_state,QAnyStringView,std::is_pointerQStringTokenizerBaseBase::tokenizer_state,std::is_sameQStringTokenizerBaseBase::tokenizer_state,QByteArray,std::is_sameQStringTokenizerBaseBase::tokenizer_state,QString > >,std::is_convertible<QStringTokenizerBaseBase::tokenizer_state &,QString> >' being compiled
C:\Qt\6.5.1\msvc2019_64\include\QtCore/qanystringview.h(216): note: see reference to alias template instantiation 'QAnyStringView::if_convertible_to<QString,QStringTokenizerBaseBase::tokenizer_state&>' being compiledI have also attached the screenshot of the Qt Creator Screen. Please help me as I have no clue about it.
-
Hi Everybody, This is my first post on this forum. Forgive me if it's a repeat post. I am using Qt6.5 with Visual Studio 2022. I am trying to build an old piece of code in Qt Creator. There is no issue with any source file of the code. But I am getting this error.
"error: C2139: 'QString': an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_convertible_to'"Full details.
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\type_traits:334: error: C2139: 'QString': an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_convertible_to'
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\type_traits(334): error C2139: 'QString': an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_convertible_to'
C:\Qt\6.5.1\msvc2019_64\include\QtCore/qstringview.h(22): note: see declaration of 'QString'
C:\Qt\6.5.1\msvc2019_64\include\QtCore/qanystringview.h(82): note: see reference to class template instantiation 'std::is_convertible<QStringTokenizerBaseBase::tokenizer_state &,QString>' being compiled
C:\Qt\6.5.1\msvc2019_64\include\QtCore/qanystringview.h(82): note: see reference to variable template 'const bool conjunction_v<std::negation<std::disjunction<std::is_same<QStringTokenizerBaseBase::tokenizer_state,enum QAnyStringView::Tag>,std::is_sameQStringTokenizerBaseBase::tokenizer_state,QAnyStringView,std::is_pointerQStringTokenizerBaseBase::tokenizer_state,std::is_sameQStringTokenizerBaseBase::tokenizer_state,QByteArray,std::is_sameQStringTokenizerBaseBase::tokenizer_state,QString > >,std::is_convertible<QStringTokenizerBaseBase::tokenizer_state &,QString> >' being compiled
C:\Qt\6.5.1\msvc2019_64\include\QtCore/qanystringview.h(216): note: see reference to alias template instantiation 'QAnyStringView::if_convertible_to<QString,QStringTokenizerBaseBase::tokenizer_state&>' being compiledI have also attached the screenshot of the Qt Creator Screen. Please help me as I have no clue about it.
-
@Alcor
In your original code, prior to whatever line causes the error, do you have something like#include <QString>
or equivalent other#include
which will lead to this? -
"In your original code, prior to whatever line causes the error, do you have something like...."
How do I find which line in which file of my code is causing this error?
@Alcor hi and welcome to devnet,
Where in your code is QString used ?
Do all the files that do something with it contain the proper include ? -
@Alcor hi and welcome to devnet,
Where in your code is QString used ?
Do all the files that do something with it contain the proper include ?wrote on 17 Jul 2023, 18:52 last edited byThere are many source code files that are using QString such as those given below. But none of these files have directive #include<QString>. I thought adding the line #include<QString> will make the error go away but it unfortunately it stays.
"
foreach(const QString &preset, presets)
{
QStringList temp = preset.split(";");
m_ui->presetComboBox->addItem(temp[0], temp[1] + ":" + temp[2]);
}"
or
"
void DateTimeWidget::on_utcOffsetDoubleSpinBox_valueChanged(double d)
{
QString prefix("UTC");
if(d >= 0.0)
prefix.append("+");m_ui->utcOffsetDoubleSpinBox->setPrefix(prefix); autoApply();
}
"
or
"
void CollapsibleDockWidget::updateWindowTitle(QString windowTitle)
{
if(_titleBar)
_titleBar->setWindowTitle(windowTitle);
}"
-
There are many source code files that are using QString such as those given below. But none of these files have directive #include<QString>. I thought adding the line #include<QString> will make the error go away but it unfortunately it stays.
"
foreach(const QString &preset, presets)
{
QStringList temp = preset.split(";");
m_ui->presetComboBox->addItem(temp[0], temp[1] + ":" + temp[2]);
}"
or
"
void DateTimeWidget::on_utcOffsetDoubleSpinBox_valueChanged(double d)
{
QString prefix("UTC");
if(d >= 0.0)
prefix.append("+");m_ui->utcOffsetDoubleSpinBox->setPrefix(prefix); autoApply();
}
"
or
"
void CollapsibleDockWidget::updateWindowTitle(QString windowTitle)
{
if(_titleBar)
_titleBar->setWindowTitle(windowTitle);
}"
Are you using Qt's QStringBuilder ?
-
wrote on 17 Jul 2023, 20:18 last edited by Alcor
@SGaist
No. Not to the best of my understanding of the code that I am working with. By the way, if it helps, the code I am working with was originally written (compiled and executed successfully for Qt4.8).Just now I found one file with include directive #Include <QtCore/QString>.
-
"In your original code, prior to whatever line causes the error, do you have something like...."
How do I find which line in which file of my code is causing this error?
@Alcor said in error: C2139: 'QString': an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_convertible_to':
How do I find which line in which file of my code is causing this error?
Go to the 'Compile Output' pane in Qt Creator. Look for the first "error C2139" . There should be a line with "cl.exe" (the MSVC compiler) before , and that line should contain the name of the source file.
-
@SGaist
No. Not to the best of my understanding of the code that I am working with. By the way, if it helps, the code I am working with was originally written (compiled and executed successfully for Qt4.8).Just now I found one file with include directive #Include <QtCore/QString>.
wrote on 18 Jul 2023, 07:49 last edited by@Alcor
First please follow @kkoehne's suggestion.It might be time now for you to create a brand new, standalone project in Creator. Keep it tiny, put
#include <QString>
at the head of the.cpp
file andQString temp;
somewhere inside a function. As little else as possible. Try to just compile. Does that work or generate errors? -
wrote about 15 hours ago last edited by WWebber
I ran into exactly the same problem!
Porting from V5.12.x (VS2019) to V6.5.3 (VS2022).
How did you fix this?
The project works perfect with VS2019!
The problem is that the error message does not point to any useful source file than "type_traits". -
@WWebber: Have you tried the suggestion from @kkoehne in https://forum.qt.io/post/765260 ?
-
@WWebber: Have you tried the suggestion from @kkoehne in https://forum.qt.io/post/765260 ?
wrote about 13 hours ago last edited by@aha_1980 said in error: C2139: 'QString': an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_convertible_to':
@WWebber: Have you tried the suggestion from @kkoehne in https://forum.qt.io/post/765260 ?
It points to 'type_traits' and to exactly this line:
struct is_convertible : bool_constant<__is_convertible_to(_From, _To)> {
// determine whether _From is convertible to _To
};1>C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.43.34808\include\type_traits(323,39): error C2139: 'QString': an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_convertible_to'
1>(compiling source file '../QT/test.cpp')
1> c:\Qt6\6.5.3\msvc2019_64\include\QtCore\qcontainerfwd.h(30,7):
1> see declaration of 'QString'
1> C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.43.34808\include\type_traits(323,39):
1> the template instantiation context (the oldest one first) is
1> c:\Qt6\6.5.3\msvc2019_64\include\QtCore\qstringtokenizer.h(27,30):
1> while compiling class template member function 'QAnyStringView::QAnyStringView(Container &&,wrapped<Container,QString>::type &&)'
1> c:\Qt6\6.5.3\msvc2019_64\include\QtCore\qstringtokenizer.h(27,30):
1> while processing the default template argument of 'QAnyStringView::QAnyStringView(Container &&,wrapped<Container,QString>::type &&)'
1> c:\Qt6\6.5.3\msvc2019_64\include\QtCore\qanystringview.h(216,35):
1> see reference to alias template instantiation 'QAnyStringView::if_convertible_to<QString,QStringTokenizerBaseBase::tokenizer_state&>' being compiled
1> c:\Qt6\6.5.3\msvc2019_64\include\QtCore\qanystringview.h(82,53):
1> see reference to variable template 'const bool conjunction_v<std::negation<std::disjunction<std::is_same<QStringTokenizerBaseBase::tokenizer_state,enum QAnyStringView::Tag>,std::is_sameQStringTokenizerBaseBase::tokenizer_state,QAnyStringView,std::is_pointerQStringTokenizerBaseBase::tokenizer_state,std::is_sameQStringTokenizerBaseBase::tokenizer_state,QByteArray,std::is_sameQStringTokenizerBaseBase::tokenizer_state,QString > >,std::is_convertible<QStringTokenizerBaseBase::tokenizer_state &,QString> >' being compiled
1> c:\Qt6\6.5.3\msvc2019_64\include\QtCore\qanystringview.h(82,53):
1> see reference to class template instantiation 'std::is_convertible<QStringTokenizerBaseBase::tokenizer_state &,QString>' being compiled