diff options
Diffstat (limited to 'abstractmetalang.cpp')
-rw-r--r-- | abstractmetalang.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/abstractmetalang.cpp b/abstractmetalang.cpp index 94114e3e9..73f617637 100644 --- a/abstractmetalang.cpp +++ b/abstractmetalang.cpp @@ -1102,12 +1102,15 @@ AbstractMetaFunctionList AbstractMetaClass::nonVirtualShellFunctions() const AbstractMetaFunctionList AbstractMetaClass::implicitConversions() const { - AbstractMetaFunctionList list = queryFunctions(Constructors); + if (!hasCloneOperator() && !hasExternalConversionOperators()) + return AbstractMetaFunctionList(); + AbstractMetaFunctionList returned; - if (!hasCloneOperator()) - return returned; + AbstractMetaFunctionList list = queryFunctions(Constructors); + list.append(externalConversionOperators()); + foreach (AbstractMetaFunction *f, list) { - if ((f->actualMinimumArgumentCount() == 1 || f->arguments().size() == 1) + if ((f->actualMinimumArgumentCount() == 1 || f->arguments().size() == 1 || f->isConversionOperator()) && !f->isExplicit() && !f->isCopyConstructor() && !f->isModifiedRemoved() |