1
2
3
4
5
6 #ifndef CMAJOR_BINDER_CONCEPT_INCLUDED
7 #define CMAJOR_BINDER_CONCEPT_INCLUDED
8 #include <cmajor/symbols/Scope.hpp>
9 #include <cmajor/symbols/Exception.hpp>
10 #include <cmajor/symbols/TemplateSymbol.hpp>
11 #include <cmajor/symbols/ConceptSymbol.hpp>
12 #include <sngcm/ast/Concept.hpp>
13
14 namespace cmajor { namespace binder {
15
16 using namespace sngcm::ast;
17 using namespace cmajor::symbols;
18
19 class BoundCompileUnit;
20 class BoundFunction;
21 class BoundConstraint;
22
23 ConceptSymbol* ResolveConceptId(ConceptIdNode* conceptIdNode, BoundCompileUnit& boundCompileUnit, ContainerScope* containerScope);
24
25 bool CheckConstraint(ConstraintNode* constraint, const NodeList<Node>& usingNodes, BoundCompileUnit& boundCompileUnit, ContainerScope* containerScope, BoundFunction* currentFunction,
26 const std::std::vector<TemplateParameterSymbol*>&templateParameters, conststd::std::unordered_map<TemplateParameterSymbol*, TypeSymbol*>&templateParameterMap,
27 std::std::unique_ptr<BoundConstraint>&boundConstraint, constSpan&span, constboost::uuids::uuid&moduleId, FunctionSymbol* viableFunction, std::std::unique_ptr<Exception>&conceptCheckException);
28
29 } }
30
31 #endif // CMAJOR_BINDER_CONCEPT_INCLUDED