MongoDB C++ Driver  mongocxx-3.10.2
All Classes Namespaces Functions Typedefs Enumerations Enumerator Friends Pages
compiler.hpp
1 // Copyright 2015 MongoDB Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 // clang-format off
16 
17 #define BSONCXX_IF_MSVC(...)
18 #define BSONCXX_IF_GCC(...)
19 #define BSONCXX_IF_CLANG(...)
20 #define BSONCXX_IF_GNU_LIKE(...) \
21  BSONCXX_IF_GCC(__VA_ARGS__) \
22  BSONCXX_IF_CLANG(__VA_ARGS__)
23 
24 #ifdef __GNUC__
25  #ifdef __clang__
26  #undef BSONCXX_IF_CLANG
27  #define BSONCXX_IF_CLANG(...) __VA_ARGS__
28  #else
29  #undef BSONCXX_IF_GCC
30  #define BSONCXX_IF_GCC(...) __VA_ARGS__
31  #endif
32 #elif defined(_MSC_VER)
33  #undef BSONCXX_IF_MSVC
34  #define BSONCXX_IF_MSVC(...) __VA_ARGS__
35 #endif
36 
37 // clang-format on
38 
39 // Disable MSVC warnings that cause a lot of noise related to DLL visibility
40 // for types that we don't control (like std::unique_ptr).
41 BSONCXX_PUSH_WARNINGS();
42 BSONCXX_DISABLE_WARNING(MSVC(4251));
43 BSONCXX_DISABLE_WARNING(MSVC(5275));
44 
45 #define BSONCXX_INLINE inline BSONCXX_PRIVATE
46 #define BSONCXX_CALL BSONCXX_IF_MSVC(__cdecl)