1 // =================================
 2 // Copyright (c) 2021 Seppo Laakko
 3 // Distributed under the MIT license
 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* conceptIdNodeBoundCompileUnit& boundCompileUnitContainerScope* containerScope);
24 
25 bool CheckConstraint(ConstraintNode* constraintconst NodeList<Node>& usingNodesBoundCompileUnit& boundCompileUnitContainerScope* containerScopeBoundFunction* currentFunction
26     const std::std::vector<TemplateParameterSymbol*>&templateParametersconststd::std::unordered_map<TemplateParameterSymbol*TypeSymbol*>&templateParameterMap
27     std::std::unique_ptr<BoundConstraint>&boundConstraintconstSpan&spanconstboost::uuids::uuid&moduleIdFunctionSymbol* viableFunctionstd::std::unique_ptr<Exception>&conceptCheckException);
28 
29 } } // namespace cmajor::binder
30 
31 #endif // CMAJOR_BINDER_CONCEPT_INCLUDED