OK, took me a while to narrow down the culprit lines of code that were causing the stack trace, but here they are:
Test1.h:
======
namespace LLCore
{
class TrueType { public: typedef TrueType Type; typedef TrueType TrueOnlyType; static const bool cValue = true; static bool Value() { return true; } };
class FalseType { public: typedef FalseType Type; typedef FalseType FalseOnlyType; static const bool cValue = false; static bool Value() { return false; } };
template<bool T_VALUE> class BoolType { };
template<> class BoolType<true> : public TrueType{};
template<> class BoolType<false> : public FalseType{};
#define LLCORE_INTERNAL_DECLARE_HASOPERATOR(ExpectedOperator, ExpectedOperatorName) template<typename T> \
struct InternalHasOperator_ ## ExpectedOperatorName \
{ \
template<class U> static char (&test(decltype(U::operator ExpectedOperator) const*))[1]; \
template<class U> static char (&test(...))[2]; \
static const bool cValue = (sizeof(test<T>(0)) == 1); \
}; \
template<typename T> class HasMember_ ## ExpectedOperatorName : public LLCore::BoolType<InternalHasOperator_ ## ExpectedOperatorName<T>::cValue> {};
LLCORE_INTERNAL_DECLARE_HASOPERATOR(== , Equals);
}
C# Generator Project:
================
With a ILibrary Setup like this:
public void Setup(Driver driver)
{
var options = driver.Options;
options.GeneratorKind = CppSharp.Generators.GeneratorKind.CLI;
options.LibraryName = "LLCS";
options.Verbose = true;
options.IncludeDirs.Add(".");
options.LibraryDirs.Add("../../../../Output/Win32/Debug/LLCore");
options.OutputDir = "../../../LLCS/LLCore";
options.Libraries.Add("LLCore.lib");
options.Headers.AddRange(new String[]
{
"../../../LLCore/Test1.h"
});
}
Output:
=====
Has the following output and then crashes the generator with the following stack trace:
Parsing libraries...
Parsed 'LLCore.lib'
Indexing library symbols...
Parsing code...
Parsed '../../../LLCore/Test1.h'
Processing code...
Pass 'CppSharp.Passes.CleanUnitPass'
Pass 'CppSharp.Passes.SortDeclarationsPass'
Pass 'CppSharp.Passes.ResolveIncompleteDeclsPass'
Pass 'CppSharp.Passes.CheckIgnoredDeclsPass'
Decl 'BoolType' was ignored due to dependent context
Decl 'InternalHasOperator_Equals' was ignored due to dependent context
Function 'test' was ignored due to incomplete param
Decl 'HasMember_Equals' was ignored due to dependent context
Pass 'CppSharp.Passes.FindSymbolsPass'
Pass 'CppSharp.Passes.CheckStaticClass'
Pass 'CppSharp.Passes.MoveOperatorToClassPass'
Pass 'CppSharp.Passes.MoveFunctionToClassPass'
Pass 'CppSharp.Passes.CheckAmbiguousFunctions'
Pass 'CppSharp.Passes.CheckOperatorsOverloadsPass'
Invalid operator overload TrueType::Equal
Invalid operator overload TrueType::Equal
Invalid operator overload FalseType::Equal
Invalid operator overload FalseType::Equal
Pass 'CppSharp.Passes.CheckVirtualOverrideReturnCovariance'
Pass 'CppSharp.Passes.FieldToPropertyPass'
Pass 'CppSharp.Passes.CleanInvalidDeclNamesPass'
Pass 'CppSharp.Passes.CheckIgnoredDeclsPass'
Function 'test' was ignored due to incomplete param
Pass 'CppSharp.Passes.CheckFlagEnumsPass'
Pass 'CppSharp.Passes.CheckDuplicatedNamesPass'
Generating code...
A first chance exception of type 'System.NullReferenceException' occurred in CppSharp.Generator.dll
at CppSharp.Generators.CLI.CLIHeadersTemplate.GenerateIncludeForwardRefs()
at CppSharp.Generators.CLI.CLIHeadersTemplate.Process()
at CppSharp.Generators.Generator.Generate()
at CppSharp.Driver.GenerateCode()
at CppSharp.ConsoleDriver.Run(ILibrary library)
at LLCSGen.Program.Main(String[] args) in LLTest\src\LLCSGen\Program.cs:line 17
Done
I also have a standalone sln with all the relevant code, projects, etc. that you can use if you like - just let me know.