mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-22 14:12:10 +02:00
Bug 417700 - Semantic Error: Invalid overload of 'endl' for a templated
parameter Change-Id: Icd110a386421d9d5cc9502dd8d4cd56328119a77 Signed-off-by: Nathan Ridge <zeratul976@hotmail.com> Reviewed-on: https://git.eclipse.org/r/19834 Reviewed-by: Sergey Prigogin <eclipse.sprigogin@gmail.com> IP-Clean: Sergey Prigogin <eclipse.sprigogin@gmail.com> Tested-by: Sergey Prigogin <eclipse.sprigogin@gmail.com>
This commit is contained in:
parent
d96ec1dfc8
commit
dd7dde956f
2 changed files with 27 additions and 1 deletions
|
@ -5375,6 +5375,26 @@ public class AST2TemplateTests extends AST2TestBase {
|
||||||
assertSame(method, ((ICPPSpecialization) reference).getSpecializedBinding());
|
assertSame(method, ((ICPPSpecialization) reference).getSpecializedBinding());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// template <typename CharT>
|
||||||
|
// struct ostream {
|
||||||
|
// template <typename T>
|
||||||
|
// ostream& operator<<(T);
|
||||||
|
//
|
||||||
|
// ostream& operator<<(ostream&(*)(ostream&));
|
||||||
|
// };
|
||||||
|
//
|
||||||
|
// template <typename CharT>
|
||||||
|
// ostream<CharT>& endl(ostream<CharT>&);
|
||||||
|
//
|
||||||
|
// template <typename T>
|
||||||
|
// void test(T t) {
|
||||||
|
// ostream<char> out;
|
||||||
|
// out << t << endl;
|
||||||
|
// }
|
||||||
|
public void testInstantiationOfEndlInTemplate_417700() throws Exception {
|
||||||
|
parseAndCheckBindings();
|
||||||
|
}
|
||||||
|
|
||||||
// template<typename T> bool MySort(const T& a);
|
// template<typename T> bool MySort(const T& a);
|
||||||
// bool MySort(const int& a);
|
// bool MySort(const int& a);
|
||||||
// template<typename V> void sort(V __comp);
|
// template<typename V> void sort(V __comp);
|
||||||
|
|
|
@ -2987,7 +2987,7 @@ public class CPPSemantics {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (targetType == null && parent instanceof IASTExpression
|
if (targetType == null && parent instanceof ICPPASTExpression
|
||||||
&& parent instanceof IASTImplicitNameOwner) {
|
&& parent instanceof IASTImplicitNameOwner) {
|
||||||
// Trigger resolution of overloaded operator, which may resolve the
|
// Trigger resolution of overloaded operator, which may resolve the
|
||||||
// function set.
|
// function set.
|
||||||
|
@ -2995,6 +2995,12 @@ public class CPPSemantics {
|
||||||
final IBinding newBinding = name.getPreBinding();
|
final IBinding newBinding = name.getPreBinding();
|
||||||
if (!(newBinding instanceof CPPFunctionSet))
|
if (!(newBinding instanceof CPPFunctionSet))
|
||||||
return newBinding;
|
return newBinding;
|
||||||
|
|
||||||
|
// If we're in a dependent context, we don't have enough information
|
||||||
|
// to resolve the function set.
|
||||||
|
if (((ICPPASTExpression) parent).getEvaluation().isTypeDependent()) {
|
||||||
|
return CPPDeferredFunction.createForCandidates(functionSet.getBindings());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ICPPFunction function = resolveTargetedFunction(targetType, functionSet, name);
|
ICPPFunction function = resolveTargetedFunction(targetType, functionSet, name);
|
||||||
|
|
Loading…
Add table
Reference in a new issue