On Tue, May 16, 2017 at 10:19 AM, Kenton Varda <[email protected]>
wrote:

> Another possible solution is to convert macros into proper symbols in the
> global scope. E.g.
>
> #ifdef VOID
> typedef VOID VOID_;
> #undef VOID
> typedef VOID_ VOID;
> #endif
>
> This approach then allows the application to use both the Windows VOID
> symbol and capnp::VOID without doing its own macro tricks.
>

Hmm, that would be a nice advantage. It would also be implementable by just
including a (slightly modified/enhanced) kj/windows-sanity.h in kj/common.h
or whatever header is guaranteed to be included by any and all capnp
headers.

I'm not sure which approach I prefer, now. I'll think about it and revisit
it next week when I can hack on it. :)


> That said, the ability to emulate system_header for MSVC would be nice.
>
> -Kenton
>
> On Mon, May 15, 2017 at 6:01 PM, Harris Hancock <[email protected]> wrote:
>
>> Kenton,
>>
>> I have a suggestion for a solution over on the GitHub issue for this:
>> https://github.com/sandstorm-io/capnproto/issues/284
>>
>> It involves `#include`ing a preamble and postamble header at the start
>> and end of every public header -- the preamble uses `#pragma push_macro` on
>> problematic defines and the postamble restores them with `#pragma
>> pop_macro`. I stole the idea from Boost.Asio. I know it's gross, but it
>> seems like the most robust solution to me, and allows us to emulate
>> `system_header` behavior. I can submit a PR implementing this idea for
>> consideration in a week or two.
>>
>> Harris
>>
>> On Fri, May 12, 2017 at 6:22 PM, Kenton Varda <[email protected]>
>> wrote:
>>
>>> Hi,
>>>
>>> The problem is that windows.h #defines the symbol VOID. You will either
>>> need to include windows.h after capnp headers, or you will need to #undef
>>> VOID after the include.
>>>
>>> We should probably make this more automatic, or at least provide a
>>> better error message...
>>>
>>> -Kenton
>>>
>>> On May 12, 2017 6:20 PM, <[email protected]> wrote:
>>>
>>>> I'm trying to get Cap'n Proto 0.6.0 compiled as a plugin under
>>>> UnrealEngine 4.13 using Visual Studio 2015 (update 3). I have compiled this
>>>> version under Visual Studio from source. To test, if I create just a plain
>>>> C++ project and use the installed Cap'n headers and libraries I can
>>>> generate test message classes that seem to compile with a few compiler
>>>> warnings. However when compiling an Unreal Project (or a Win32 project)
>>>> with these same classes I get all sorts of strange errors in kj and cap'n
>>>> (common.h, etc.) as it imports the header files. My best guess is that it
>>>> has something to do with the precompiled headers in those environments?
>>>> Does anyone have a clue or have any advice using Cap'n Proto under Unreal
>>>> Engine/ Windows?
>>>>
>>>> Example of the errors:
>>>>
>>>> thirdparty\capnproto\include\capnp\common.h(64): error C2628:
>>>> 'capnp::Void' followed by 'void' is illegal (did you forget a ';'?)
>>>> thirdparty\capnproto\include\capnp\common.h(64): error C2513:
>>>> 'capnp::Void': no variable declared before '='
>>>> thirdparty\capnproto\include\capnp\common.h(96): error C2062: type
>>>> 'void' unexpected
>>>> thirdparty\capnproto\include\capnp\common.h(106): error C2143: syntax
>>>> error: missing ';' before '}'
>>>> thirdparty\capnproto\include\capnp\common.h(130): error C2065: 'Void':
>>>> undeclared identifier
>>>> thirdparty\capnproto\include\capnp\common.h(130): error C2923:
>>>> '_::Kind_': 'Void' is not a valid template type argument for parameter 'T'
>>>> thirdparty\capnproto\include\capnp\common.h(130): error C2913:
>>>> explicit specialization; '_::Kind_' is not a specialization of a class
>>>> template
>>>> thirdparty\capnproto\include\capnp\common.h(131): error C2913:
>>>> explicit specialization; '_::Kind_' is not a specialization of a class
>>>> template
>>>>
>>>> I can include these  headers in an "empty project" and compile these
>>>> classes fine so I'm not sure what the deal is.
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Cap'n Proto" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> Visit this group at https://groups.google.com/group/capnproto.
>>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Cap'n Proto" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> Visit this group at https://groups.google.com/group/capnproto.
>>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Cap'n Proto" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> Visit this group at https://groups.google.com/group/capnproto.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Cap'n Proto" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
Visit this group at https://groups.google.com/group/capnproto.

Reply via email to