use c++17 stl on windows

While the absl:: namespace is aliased to std:: in a
standard win32 build, it also needlessly adds the
library to the build process, only to discard most
of it at link time. This also makes the distinction
between Abseil STL and G++ STL more explicit, to avoid
some forms of confusion.

From the product page:
"...We think not: if you look at the preprocessor conditional
structure in our string_view.h you'll see that we are trying
to identify whether your C++ installation has std::string_view.
If you do, absl::string_view is defined only as an alias to the
standard type. If you don't, you get a C++11/C++14 compatible
implementation of the type. This means you can adopt Abseil,
and for types we are b you can use the type from the absl
namespace. As soon as your project is built with the appropriate
compiler/standard library version, we'll fall away and leave you
with the standard type, albeit spelled funny. Better: as soon as
you know that your project will only build with the appropriate
language version you can run tools that we will provide to change
the places that refer to absl::string_view to spell it std::string_view
-- since those are the same type, this is safe to do, even across
API boundaries.

So, one reason you might want to adopt Abseil: early access to facilities
from upcoming C++ standard library releases, with a clear migration path."
pull/283/head
Rick V 5 years ago
parent 8800cee785
commit 72d0720da0
No known key found for this signature in database
GPG Key ID: C0EDC8723FDC3465

@ -755,7 +755,14 @@ else()
add_library(${STATIC_LIB} STATIC ${LIB_SRC})
add_library(${UTIL_LIB} STATIC ${LIB_UTIL_SRC})
# cut back on fluff
if (NOT WIN32)
target_link_libraries(${UTIL_LIB} absl::optional)
else()
target_link_libraries(${UTIL_LIB})
endif(NOT WIN32)
add_library(${PLATFORM_LIB} STATIC ${LIB_PLATFORM_SRC})
if(USE_LIBABYSS)

@ -5,7 +5,11 @@
#include <service/types.hpp>
#include <util/bencode.hpp>
#if __cplusplus >= 201703L
#include <optional>
#else
#include <absl/types/optional.h>
#endif
namespace llarp
{
@ -22,7 +26,11 @@ namespace llarp
public:
VanityNonce vanity;
#if __cplusplus >= 201703L
using OptNonce = std::optional< VanityNonce >;
#else
using OptNonce = absl::optional< VanityNonce >;
#endif
ServiceInfo() = default;

@ -4,8 +4,12 @@
#include <util/queue_manager.hpp>
#include <util/threading.hpp>
#include <absl/types/optional.h>
#include <atomic>
#if __cplusplus >= 201703L
#include <optional>
#else
#include <absl/types/optional.h>
#endif
#include <tuple>
namespace llarp
@ -72,8 +76,11 @@ namespace llarp
// Remove an element from the queue. Block until an element is available
Type
popFront();
#if __cplusplus >= 201703L
std::optional< Type >
#else
absl::optional< Type >
#endif
tryPopFront();
// Remove all elements from the queue. Note this is not atomic, and if
@ -260,7 +267,11 @@ namespace llarp
}
template < typename Type >
#if __cplusplus >= 201703L
std::optional< Type >
#else
absl::optional< Type >
#endif
Queue< Type >::tryPopFront()
{
uint32_t generation;
@ -285,7 +296,11 @@ namespace llarp
// - notify any waiting pushers
QueuePopGuard< Type > popGuard(*this, generation, index);
#if __cplusplus >= 201703L
return std::optional< Type >(std::move(m_data[index]));
#else
return absl::optional< Type >(std::move(m_data[index]));
#endif
}
template < typename Type >

@ -572,8 +572,12 @@ TEST(TestQueue, moveIt)
(void)popped;
ASSERT_EQ(5u, counter);
absl::optional< MoveTester > optPopped = queue.tryPopFront();
#if __cplusplus >= 201703L
std::optional< MoveTester >
#else
absl::optional< MoveTester >
#endif
optPopped = queue.tryPopFront();
ASSERT_TRUE(optPopped.has_value());

@ -1,6 +1,10 @@
#include <util/queue_manager.hpp>
#if __cplusplus >= 201703L
#include <optional>
#else
#include <absl/types/optional.h>
#endif
#include <vector>
#include <gtest/gtest.h>
@ -74,8 +78,11 @@ class IntQueue
return false;
}
}
#if __cplusplus >= 201703L
std::optional< int >
#else
absl::optional< int >
#endif
tryPopFront()
{
uint32_t gen = 0;

Loading…
Cancel
Save