Skip to content

export http_exception for non Windows builds #1577

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 11, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions Release/include/cpprest/details/cpprest_compat.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,20 @@

#ifdef _NO_ASYNCRTIMP
#define _ASYNCRTIMP
#define _ASYNCRTIMP_TYPEINFO
#else // ^^^ _NO_ASYNCRTIMP ^^^ // vvv !_NO_ASYNCRTIMP vvv
#ifdef _ASYNCRT_EXPORT
#define _ASYNCRTIMP __declspec(dllexport)
#else // ^^^ _ASYNCRT_EXPORT ^^^ // vvv !_ASYNCRT_EXPORT vvv
#define _ASYNCRTIMP __declspec(dllimport)
#endif // _ASYNCRT_EXPORT

#if defined(_WIN32)
#define _ASYNCRTIMP_TYPEINFO
#else // ^^^ _WIN32 ^^^ // vvv !_WIN32 vvv
#define _ASYNCRTIMP_TYPEINFO __attribute__((visibility("default")))
#endif // _WIN32
Comment on lines +82 to +86
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this work when _NO_ASYNCRTIMP is defined, it seems to me it might result in a duplicate definition. Also if you do define _NO_ASYNCRTIMP you should probably not define _ASYNCRTIMP_TYPEINFO on any platform

Sorry this has gone back and forth so much, I know it's annoying.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you considered this case and have a reason for structuring it this way that's fine, I just need to know why.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The TYPEINFO define is within the !_NO_ASYNCTRIMP block. In the _NO_ASYNCTRIMP block I defined the empty case for all compilers, like _ASYNCTRIMP.

Since _ASYNCRTIMP_TYPEINFO needs to be defined for the compiler, I also defined an empty for WIN32 within the !_NO_ASYNCRTIMP block. I could move it out of the _NO_ASYNCRTIMP block and do something like:

    #if !_NO_ASYNCRTIMP && !defined(_WIN32)
    attribute
    #else
    empty
    #endif

But my initial thought was that the ASYNCRTIMP_TYPEINFO should be defined within the _NO_ASYNCRTIMP block for easier maintenance, as the developers then see that it is tightly linked to the export/no-export configuration.

Copy link
Member

@barcharcraz barcharcraz Mar 11, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh I'm sorry I missed the structure because of the whitespace, whoops


#endif // _NO_ASYNCRTIMP

#ifdef CASABLANCA_DEPRECATION_NO_WARNINGS
Expand Down
2 changes: 1 addition & 1 deletion Release/include/cpprest/http_msg.h
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ class header_names
/// <summary>
/// Represents an HTTP error. This class holds an error message and an optional error code.
/// </summary>
class http_exception : public std::exception
class _ASYNCRTIMP_TYPEINFO http_exception : public std::exception
{
public:
/// <summary>
Expand Down