From 53864dee7b7571e6c18c1400b1792f1e4b875398 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Ho=C5=99e=C5=88ovsk=C3=BD?= Date: Tue, 25 Apr 2017 19:54:22 +0200 Subject: [PATCH] Fix MSVC compilation error MSVC's `std::vector` requires its allocator to have copy constructor from the same allocator kind, but templated over different type. --- projects/SelfTest/ToStringVector.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/projects/SelfTest/ToStringVector.cpp b/projects/SelfTest/ToStringVector.cpp index 002d8ef4..eafe886d 100644 --- a/projects/SelfTest/ToStringVector.cpp +++ b/projects/SelfTest/ToStringVector.cpp @@ -27,8 +27,14 @@ namespace { /* Minimal Allocator */ template struct minimal_allocator { - typedef T value_type; - typedef std::size_t size_type; + using value_type = T; + using size_type = std::size_t; + + minimal_allocator() = default; + template + minimal_allocator(const minimal_allocator&) {} + + T *allocate( size_type n ) { return static_cast( ::operator new( n * sizeof(T) ) ); } @@ -52,8 +58,8 @@ TEST_CASE( "vector -> toString", "[toString][vector,allocator][c+ } TEST_CASE( "vec> -> toString", "[toString][vector,allocator][c++11][.]" ) { - typedef std::vector > inner; - typedef std::vector vector; + using inner = std::vector>; + using vector = std::vector; vector v; REQUIRE( Catch::toString(v) == "{ }" ); v.push_back( inner { "hello" } );