summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2016-07-18 20:55:31 +0000
committerBernard Normier <bernard@zeroc.com>2016-07-18 20:56:23 +0000
commita05470bdfc2c43e49eae41bbf045cd8856d9433d (patch)
tree4dc1d42cd865dfa3663a7083d08e1ad5df9b5e60 /cpp
parentCustomizable PHP config (diff)
downloadice-a05470bdfc2c43e49eae41bbf045cd8856d9433d.tar.bz2
ice-a05470bdfc2c43e49eae41bbf045cd8856d9433d.tar.xz
ice-a05470bdfc2c43e49eae41bbf045cd8856d9433d.zip
New C++11 optional mapping
Diffstat (limited to 'cpp')
-rwxr-xr-xcpp/allTests.py2
-rw-r--r--cpp/config/Make.rules1
-rw-r--r--cpp/include/Ice/Ice.h1
-rw-r--r--cpp/include/Ice/InputStream.h4
-rw-r--r--cpp/include/Ice/Optional.h1107
-rw-r--r--cpp/include/IceUtil/Optional.h26
-rw-r--r--cpp/msbuild/ice.test.sln12
-rw-r--r--cpp/src/Slice/CPlusPlusUtil.cpp36
-rw-r--r--cpp/src/slice2cpp/Gen.cpp37
-rw-r--r--cpp/test/Ice/optional/AllTests.cpp602
-rw-r--r--cpp/test/Ice/optional/Client.cpp4
-rw-r--r--cpp/test/Ice/optional/Server.cpp2
-rw-r--r--cpp/test/Ice/optional/ServerAMD.cpp2
-rw-r--r--cpp/test/Ice/optional/StringView.h25
-rw-r--r--cpp/test/Ice/optional/TestAMDI.cpp393
-rw-r--r--cpp/test/Ice/optional/TestAMDI.h204
-rw-r--r--cpp/test/Ice/optional/TestI.cpp124
-rw-r--r--cpp/test/Ice/optional/TestI.h122
-rw-r--r--cpp/test/Ice/optional/msbuild/client/client.vcxproj4
-rw-r--r--cpp/test/Ice/optional/msbuild/server/server.vcxproj4
-rw-r--r--cpp/test/Ice/optional/msbuild/serveramd/serveramd.vcxproj4
21 files changed, 2355 insertions, 361 deletions
diff --git a/cpp/allTests.py b/cpp/allTests.py
index 619e67c5427..937155a6455 100755
--- a/cpp/allTests.py
+++ b/cpp/allTests.py
@@ -47,7 +47,7 @@ tests = [
("Ice/inheritance", ["core", "bt"]),
("Ice/facets", ["core", "bt"]),
("Ice/objects", ["core", "bt"]),
- ("Ice/optional", ["core", "bt", "noc++11"]),
+ ("Ice/optional", ["core", "bt"]),
("Ice/binding", ["core", "nosocks", "bt"]),
("Ice/faultTolerance", ["core", "novalgrind"]), # valgrind reports leak with aborted servers
("Ice/location", ["core"]),
diff --git a/cpp/config/Make.rules b/cpp/config/Make.rules
index 0fe6fe8a16e..933f2064fd3 100644
--- a/cpp/config/Make.rules
+++ b/cpp/config/Make.rules
@@ -67,7 +67,6 @@ cpp11_projects = test/Common \
test/IceBox/%
cpp11_excludes = IcePatch2 \
- test/Ice/optional \
test/Ice/gc \
test/Ice/echo
diff --git a/cpp/include/Ice/Ice.h b/cpp/include/Ice/Ice.h
index 92ac30b9c47..23d9ee6236e 100644
--- a/cpp/include/Ice/Ice.h
+++ b/cpp/include/Ice/Ice.h
@@ -14,6 +14,7 @@
#include <Ice/Config.h>
#include <Ice/Comparable.h>
#include <Ice/Initialize.h>
+#include <Ice/Optional.h>
#include <Ice/LocalException.h>
#include <Ice/PropertiesAdmin.h>
#include <Ice/Properties.h>
diff --git a/cpp/include/Ice/InputStream.h b/cpp/include/Ice/InputStream.h
index e6b08af4314..7a7ae8e2712 100644
--- a/cpp/include/Ice/InputStream.h
+++ b/cpp/include/Ice/InputStream.h
@@ -383,7 +383,11 @@ public:
StreamableTraits<T>::helper,
StreamableTraits<T>::fixedLength>::optionalFormat))
{
+#ifdef ICE_CPP11_MAPPING
+ v.emplace();
+#else
v.__setIsSet();
+#endif
StreamOptionalHelper<T,
StreamableTraits<T>::helper,
StreamableTraits<T>::fixedLength>::read(this, *v);
diff --git a/cpp/include/Ice/Optional.h b/cpp/include/Ice/Optional.h
new file mode 100644
index 00000000000..7ab17c3deab
--- /dev/null
+++ b/cpp/include/Ice/Optional.h
@@ -0,0 +1,1107 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2016 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+//
+// Ice::optional is a placeholder std::optional:
+// http://en.cppreference.com/w/cpp/utility/optional/optional
+//
+// This implementation is a slighly modified version of Optional.hpp,
+// published at https://github.com/akrzemi1/Optional
+// commit 3922965396fc455c6b1770374b9b4111799588a9
+
+// Copyright (C) 2011 - 2012 Andrzej Krzemienski.
+//
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// The idea and interface is based on Boost.Optional library
+// authored by Fernando Luis Cacciola Carballal
+
+#ifndef ICE_OPTIONAL_H
+#define ICE_OPTIONAL_H
+
+#ifdef ICE_CPP11_MAPPING
+
+# include <utility>
+# include <type_traits>
+# include <initializer_list>
+# include <cassert>
+# include <functional>
+# include <string>
+# include <stdexcept>
+
+# define TR2_OPTIONAL_REQUIRES(...) typename enable_if<__VA_ARGS__::value, bool>::type = false
+
+# if defined __GNUC__ // NOTE: GNUC is also defined for Clang
+# if (__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)
+# define TR2_OPTIONAL_GCC_4_8_AND_HIGHER___
+# elif (__GNUC__ > 4)
+# define TR2_OPTIONAL_GCC_4_8_AND_HIGHER___
+# endif
+#
+# if (__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)
+# define TR2_OPTIONAL_GCC_4_7_AND_HIGHER___
+# elif (__GNUC__ > 4)
+# define TR2_OPTIONAL_GCC_4_7_AND_HIGHER___
+# endif
+#
+# if (__GNUC__ == 4) && (__GNUC_MINOR__ == 8) && (__GNUC_PATCHLEVEL__ >= 1)
+# define TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___
+# elif (__GNUC__ == 4) && (__GNUC_MINOR__ >= 9)
+# define TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___
+# elif (__GNUC__ > 4)
+# define TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___
+# endif
+# endif
+#
+# if defined __clang_major__
+# if (__clang_major__ == 3 && __clang_minor__ >= 5)
+# define TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_
+# elif (__clang_major__ > 3)
+# define TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_
+# endif
+# if defined TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_
+# define TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_
+# elif (__clang_major__ == 3 && __clang_minor__ == 4 && __clang_patchlevel__ >= 2)
+# define TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_
+# endif
+# endif
+#
+# if defined _MSC_VER
+# if (_MSC_VER >= 1900)
+# define TR2_OPTIONAL_MSVC_2015_AND_HIGHER___
+# endif
+# endif
+
+# if defined __clang__
+# if (__clang_major__ > 2) || (__clang_major__ == 2) && (__clang_minor__ >= 9)
+# define OPTIONAL_HAS_THIS_RVALUE_REFS 1
+# else
+# define OPTIONAL_HAS_THIS_RVALUE_REFS 0
+# endif
+# elif defined TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___
+# define OPTIONAL_HAS_THIS_RVALUE_REFS 1
+# elif defined TR2_OPTIONAL_MSVC_2015_AND_HIGHER___
+# define OPTIONAL_HAS_THIS_RVALUE_REFS 1
+# else
+# define OPTIONAL_HAS_THIS_RVALUE_REFS 0
+# endif
+
+
+# if defined TR2_OPTIONAL_GCC_4_8_1_AND_HIGHER___
+# define OPTIONAL_HAS_CONSTEXPR_INIT_LIST 1
+# define OPTIONAL_CONSTEXPR_INIT_LIST constexpr
+# else
+# define OPTIONAL_HAS_CONSTEXPR_INIT_LIST 0
+# define OPTIONAL_CONSTEXPR_INIT_LIST
+# endif
+
+# if defined TR2_OPTIONAL_CLANG_3_5_AND_HIGHTER_ && (defined __cplusplus) && (__cplusplus != 201103L)
+# define OPTIONAL_HAS_MOVE_ACCESSORS 1
+# else
+# define OPTIONAL_HAS_MOVE_ACCESSORS 0
+# endif
+
+# // In C++11 constexpr implies const, so we need to make non-const members also non-constexpr
+# if (defined __cplusplus) && (__cplusplus == 201103L)
+# define OPTIONAL_MUTABLE_CONSTEXPR
+# else
+# define OPTIONAL_MUTABLE_CONSTEXPR constexpr
+# endif
+
+namespace std{
+
+namespace experimental{
+
+//
+// Add namespace Ice to avoid conflict with other std::experimental::optional
+// implementation
+//
+namespace Ice{
+
+// BEGIN workaround for missing is_trivially_destructible
+# if defined TR2_OPTIONAL_GCC_4_8_AND_HIGHER___
+ // leave it: it is already there
+# elif defined TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_
+ // leave it: it is already there
+# elif defined TR2_OPTIONAL_MSVC_2015_AND_HIGHER___
+ // leave it: it is already there
+# elif defined TR2_OPTIONAL_DISABLE_EMULATION_OF_TYPE_TRAITS
+ // leave it: the user doesn't want it
+# else
+ template <typename T>
+ using is_trivially_destructible = std::has_trivial_destructor<T>;
+# endif
+// END workaround for missing is_trivially_destructible
+
+# if (defined TR2_OPTIONAL_GCC_4_7_AND_HIGHER___)
+ // leave it; our metafunctions are already defined.
+# elif defined TR2_OPTIONAL_CLANG_3_4_2_AND_HIGHER_
+ // leave it; our metafunctions are already defined.
+# elif defined TR2_OPTIONAL_MSVC_2015_AND_HIGHER___
+ // leave it: it is already there
+# elif defined TR2_OPTIONAL_DISABLE_EMULATION_OF_TYPE_TRAITS
+ // leave it: the user doesn't want it
+# else
+
+
+// workaround for missing traits in GCC and CLANG
+template <class T>
+struct is_nothrow_move_constructible
+{
+ constexpr static bool value = std::is_nothrow_constructible<T, T&&>::value;
+};
+
+
+template <class T, class U>
+struct is_assignable
+{
+ template <class X, class Y>
+ constexpr static bool has_assign(...) { return false; }
+
+ template <class X, class Y, size_t S = sizeof((std::declval<X>() = std::declval<Y>(), true)) >
+ // the comma operator is necessary for the cases where operator= returns void
+ constexpr static bool has_assign(bool) { return true; }
+
+ constexpr static bool value = has_assign<T, U>(true);
+};
+
+
+template <class T>
+struct is_nothrow_move_assignable
+{
+ template <class X, bool has_any_move_assign>
+ struct has_nothrow_move_assign {
+ constexpr static bool value = false;
+ };
+
+ template <class X>
+ struct has_nothrow_move_assign<X, true> {
+ constexpr static bool value = noexcept( std::declval<X&>() = std::declval<X&&>() );
+ };
+
+ constexpr static bool value = has_nothrow_move_assign<T, is_assignable<T&, T&&>::value>::value;
+};
+// end workaround
+
+
+# endif
+
+
+
+// 20.5.4, optional for object types
+template <class T> class optional;
+
+// 20.5.5, optional for lvalue reference types
+template <class T> class optional<T&>;
+
+
+// workaround: std utility functions aren't constexpr yet
+template <class T> inline constexpr T&& constexpr_forward(typename std::remove_reference<T>::type& t) noexcept
+{
+ return static_cast<T&&>(t);
+}
+
+template <class T> inline constexpr T&& constexpr_forward(typename std::remove_reference<T>::type&& t) noexcept
+{
+ static_assert(!std::is_lvalue_reference<T>::value, "!!");
+ return static_cast<T&&>(t);
+}
+
+template <class T> inline constexpr typename std::remove_reference<T>::type&& constexpr_move(T&& t) noexcept
+{
+ return static_cast<typename std::remove_reference<T>::type&&>(t);
+}
+
+
+#if defined NDEBUG
+# define TR2_OPTIONAL_ASSERTED_EXPRESSION(CHECK, EXPR) (EXPR)
+#else
+# define TR2_OPTIONAL_ASSERTED_EXPRESSION(CHECK, EXPR) ((CHECK) ? (EXPR) : ([]{assert(!#CHECK);}(), (EXPR)))
+#endif
+
+
+namespace detail_
+{
+
+// static_addressof: a constexpr version of addressof
+template <typename T>
+struct has_overloaded_addressof
+{
+ template <class X>
+ constexpr static bool has_overload(...) { return false; }
+
+ template <class X, size_t S = sizeof(std::declval<X&>().operator&()) >
+ constexpr static bool has_overload(bool) { return true; }
+
+ constexpr static bool value = has_overload<T>(true);
+};
+
+template <typename T, TR2_OPTIONAL_REQUIRES(!has_overloaded_addressof<T>)>
+constexpr T* static_addressof(T& ref)
+{
+ return &ref;
+}
+
+template <typename T, TR2_OPTIONAL_REQUIRES(has_overloaded_addressof<T>)>
+T* static_addressof(T& ref)
+{
+ return std::addressof(ref);
+}
+
+
+// the call to convert<A>(b) has return type A and converts b to type A iff b decltype(b) is implicitly convertible to A
+template <class U>
+constexpr U convert(U v) { return v; }
+
+} // namespace detail
+
+
+constexpr struct trivial_init_t{} trivial_init{};
+
+
+// 20.5.6, In-place construction
+constexpr struct in_place_t{} in_place{};
+
+
+// 20.5.7, Disengaged state indicator
+struct nullopt_t
+{
+ struct init{};
+ constexpr explicit nullopt_t(init){}
+};
+constexpr nullopt_t nullopt{nullopt_t::init()};
+
+
+// 20.5.8, class bad_optional_access
+class bad_optional_access : public logic_error {
+public:
+ explicit bad_optional_access(const string& what_arg) : logic_error{what_arg} {}
+ explicit bad_optional_access(const char* what_arg) : logic_error{what_arg} {}
+};
+
+
+template <class T>
+union storage_t
+{
+ unsigned char dummy_;
+ T value_;
+
+ constexpr storage_t( trivial_init_t ) noexcept : dummy_() {};
+
+ template <class... Args>
+ constexpr storage_t( Args&&... args ) : value_(constexpr_forward<Args>(args)...) {}
+
+ ~storage_t(){}
+};
+
+
+template <class T>
+union constexpr_storage_t
+{
+ unsigned char dummy_;
+ T value_;
+
+ constexpr constexpr_storage_t( trivial_init_t ) noexcept : dummy_() {};
+
+ template <class... Args>
+ constexpr constexpr_storage_t( Args&&... args ) : value_(constexpr_forward<Args>(args)...) {}
+
+ ~constexpr_storage_t() = default;
+};
+
+
+template <class T>
+struct optional_base
+{
+ bool init_;
+ storage_t<T> storage_;
+
+ constexpr optional_base() noexcept : init_(false), storage_(trivial_init) {};
+
+ explicit constexpr optional_base(const T& v) : init_(true), storage_(v) {}
+
+ explicit constexpr optional_base(T&& v) : init_(true), storage_(constexpr_move(v)) {}
+
+ template <class... Args> explicit optional_base(in_place_t, Args&&... args)
+ : init_(true), storage_(constexpr_forward<Args>(args)...) {}
+
+ template <class U, class... Args, TR2_OPTIONAL_REQUIRES(is_constructible<T, std::initializer_list<U>>)>
+ explicit optional_base(in_place_t, std::initializer_list<U> il, Args&&... args)
+ : init_(true), storage_(il, std::forward<Args>(args)...) {}
+
+ ~optional_base() { if (init_) storage_.value_.T::~T(); }
+};
+
+
+template <class T>
+struct constexpr_optional_base
+{
+ bool init_;
+ constexpr_storage_t<T> storage_;
+
+ constexpr constexpr_optional_base() noexcept : init_(false), storage_(trivial_init) {};
+
+ explicit constexpr constexpr_optional_base(const T& v) : init_(true), storage_(v) {}
+
+ explicit constexpr constexpr_optional_base(T&& v) : init_(true), storage_(constexpr_move(v)) {}
+
+ template <class... Args> explicit constexpr constexpr_optional_base(in_place_t, Args&&... args)
+ : init_(true), storage_(constexpr_forward<Args>(args)...) {}
+
+ template <class U, class... Args, TR2_OPTIONAL_REQUIRES(is_constructible<T, std::initializer_list<U>>)>
+ OPTIONAL_CONSTEXPR_INIT_LIST explicit constexpr_optional_base(in_place_t, std::initializer_list<U> il, Args&&... args)
+ : init_(true), storage_(il, std::forward<Args>(args)...) {}
+
+ ~constexpr_optional_base() = default;
+};
+
+template <class T>
+using OptionalBase = typename std::conditional<
+ is_trivially_destructible<T>::value,
+ constexpr_optional_base<typename std::remove_const<T>::type>,
+ optional_base<typename std::remove_const<T>::type>
+>::type;
+
+
+
+template <class T>
+class optional : private OptionalBase<T>
+{
+ static_assert( !std::is_same<typename std::decay<T>::type, nullopt_t>::value, "bad T" );
+ static_assert( !std::is_same<typename std::decay<T>::type, in_place_t>::value, "bad T" );
+
+
+ constexpr bool initialized() const noexcept { return OptionalBase<T>::init_; }
+ typename std::remove_const<T>::type* dataptr() { return std::addressof(OptionalBase<T>::storage_.value_); }
+ constexpr const T* dataptr() const { return detail_::static_addressof(OptionalBase<T>::storage_.value_); }
+
+# if OPTIONAL_HAS_THIS_RVALUE_REFS == 1
+ constexpr const T& contained_val() const& { return OptionalBase<T>::storage_.value_; }
+# if OPTIONAL_HAS_MOVE_ACCESSORS == 1
+ OPTIONAL_MUTABLE_CONSTEXPR T&& contained_val() && { return std::move(OptionalBase<T>::storage_.value_); }
+ OPTIONAL_MUTABLE_CONSTEXPR T& contained_val() & { return OptionalBase<T>::storage_.value_; }
+# else
+ T& contained_val() & { return OptionalBase<T>::storage_.value_; }
+ T&& contained_val() && { return std::move(OptionalBase<T>::storage_.value_); }
+# endif
+# else
+ constexpr const T& contained_val() const { return OptionalBase<T>::storage_.value_; }
+ T& contained_val() { return OptionalBase<T>::storage_.value_; }
+# endif
+
+ void clear() noexcept {
+ if (initialized()) dataptr()->T::~T();
+ OptionalBase<T>::init_ = false;
+ }
+
+ template <class... Args>
+ void initialize(Args&&... args) noexcept(noexcept(T(std::forward<Args>(args)...)))
+ {
+ assert(!OptionalBase<T>::init_);
+ ::new (static_cast<void*>(dataptr())) T(std::forward<Args>(args)...);
+ OptionalBase<T>::init_ = true;
+ }
+
+ template <class U, class... Args>
+ void initialize(std::initializer_list<U> il, Args&&... args) noexcept(noexcept(T(il, std::forward<Args>(args)...)))
+ {
+ assert(!OptionalBase<T>::init_);
+ ::new (static_cast<void*>(dataptr())) T(il, std::forward<Args>(args)...);
+ OptionalBase<T>::init_ = true;
+ }
+
+public:
+ typedef T value_type;
+
+ // 20.5.5.1, constructors
+ constexpr optional() noexcept : OptionalBase<T>() {};
+ constexpr optional(nullopt_t) noexcept : OptionalBase<T>() {};
+
+ optional(const optional& rhs)
+ : OptionalBase<T>()
+ {
+ if (rhs.initialized()) {
+ ::new (static_cast<void*>(dataptr())) T(*rhs);
+ OptionalBase<T>::init_ = true;
+ }
+ }
+
+ optional(optional&& rhs) noexcept(is_nothrow_move_constructible<T>::value)
+ : OptionalBase<T>()
+ {
+ if (rhs.initialized()) {
+ ::new (static_cast<void*>(dataptr())) T(std::move(*rhs));
+ OptionalBase<T>::init_ = true;
+ }
+ }
+
+ constexpr optional(const T& v) : OptionalBase<T>(v) {}
+
+ constexpr optional(T&& v) : OptionalBase<T>(constexpr_move(v)) {}
+
+ template <class... Args>
+ explicit constexpr optional(in_place_t, Args&&... args)
+ : OptionalBase<T>(in_place_t{}, constexpr_forward<Args>(args)...) {}
+
+ template <class U, class... Args, TR2_OPTIONAL_REQUIRES(is_constructible<T, std::initializer_list<U>>)>
+ OPTIONAL_CONSTEXPR_INIT_LIST explicit optional(in_place_t, std::initializer_list<U> il, Args&&... args)
+ : OptionalBase<T>(in_place_t{}, il, constexpr_forward<Args>(args)...) {}
+
+ // 20.5.4.2, Destructor
+ ~optional() = default;
+
+ // 20.5.4.3, assignment
+ optional& operator=(nullopt_t) noexcept
+ {
+ clear();
+ return *this;
+ }
+
+ optional& operator=(const optional& rhs)
+ {
+ if (initialized() == true && rhs.initialized() == false) clear();
+ else if (initialized() == false && rhs.initialized() == true) initialize(*rhs);
+ else if (initialized() == true && rhs.initialized() == true) contained_val() = *rhs;
+ return *this;
+ }
+
+ optional& operator=(optional&& rhs)
+ noexcept(is_nothrow_move_assignable<T>::value && is_nothrow_move_constructible<T>::value)
+ {
+ if (initialized() == true && rhs.initialized() == false) clear();
+ else if (initialized() == false && rhs.initialized() == true) initialize(std::move(*rhs));
+ else if (initialized() == true && rhs.initialized() == true) contained_val() = std::move(*rhs);
+ return *this;
+ }
+
+ template <class U>
+ auto operator=(U&& v)
+ -> typename enable_if
+ <
+ is_same<typename decay<U>::type, T>::value,
+ optional&
+ >::type
+ {
+ if (initialized()) { contained_val() = std::forward<U>(v); }
+ else { initialize(std::forward<U>(v)); }
+ return *this;
+ }
+
+
+ template <class... Args>
+ void emplace(Args&&... args)
+ {
+ clear();
+ initialize(std::forward<Args>(args)...);
+ }
+
+ template <class U, class... Args>
+ void emplace(initializer_list<U> il, Args&&... args)
+ {
+ clear();
+ initialize<U, Args...>(il, std::forward<Args>(args)...);
+ }
+
+ // 20.5.4.4, Swap
+ void swap(optional<T>& rhs) noexcept(is_nothrow_move_constructible<T>::value && noexcept(swap(declval<T&>(), declval<T&>())))
+ {
+ if (initialized() == true && rhs.initialized() == false) { rhs.initialize(std::move(**this)); clear(); }
+ else if (initialized() == false && rhs.initialized() == true) { initialize(std::move(*rhs)); rhs.clear(); }
+ else if (initialized() == true && rhs.initialized() == true) { using std::swap; swap(**this, *rhs); }
+ }
+
+ // 20.5.4.5, Observers
+
+ explicit constexpr operator bool() const noexcept { return initialized(); }
+
+ constexpr T const* operator ->() const {
+ return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), dataptr());
+ }
+
+# if OPTIONAL_HAS_MOVE_ACCESSORS == 1
+
+ OPTIONAL_MUTABLE_CONSTEXPR T* operator ->() {
+ assert (initialized());
+ return dataptr();
+ }
+
+ constexpr T const& operator *() const& {
+ return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), contained_val());
+ }
+
+ OPTIONAL_MUTABLE_CONSTEXPR T& operator *() & {
+ assert (initialized());
+ return contained_val();
+ }
+
+ OPTIONAL_MUTABLE_CONSTEXPR T&& operator *() && {
+ assert (initialized());
+ return constexpr_move(contained_val());
+ }
+
+ constexpr T const& value() const& {
+ return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val());
+ }
+
+ OPTIONAL_MUTABLE_CONSTEXPR T& value() & {
+ return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val());
+ }
+
+ OPTIONAL_MUTABLE_CONSTEXPR T&& value() && {
+ if (!initialized()) throw bad_optional_access("bad optional access");
+ return std::move(contained_val());
+ }
+
+# else
+
+ T* operator ->() {
+ assert (initialized());
+ return dataptr();
+ }
+
+ constexpr T const& operator *() const {
+ return TR2_OPTIONAL_ASSERTED_EXPRESSION(initialized(), contained_val());
+ }
+
+ T& operator *() {
+ assert (initialized());
+ return contained_val();
+ }
+
+ constexpr T const& value() const {
+ return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val());
+ }
+
+ T& value() {
+ return initialized() ? contained_val() : (throw bad_optional_access("bad optional access"), contained_val());
+ }
+
+# endif
+
+# if OPTIONAL_HAS_THIS_RVALUE_REFS == 1
+
+ template <class V>
+ constexpr T value_or(V&& v) const&
+ {
+ return *this ? **this : detail_::convert<T>(constexpr_forward<V>(v));
+ }
+
+# if OPTIONAL_HAS_MOVE_ACCESSORS == 1
+
+ template <class V>
+ OPTIONAL_MUTABLE_CONSTEXPR T value_or(V&& v) &&
+ {
+ return *this ? constexpr_move(const_cast<optional<T>&>(*this).contained_val()) : detail_::convert<T>(constexpr_forward<V>(v));
+ }
+
+# else
+
+ template <class V>
+ T value_or(V&& v) &&
+ {
+ return *this ? constexpr_move(const_cast<optional<T>&>(*this).contained_val()) : detail_::convert<T>(constexpr_forward<V>(v));
+ }
+
+# endif
+
+# else
+
+ template <class V>
+ constexpr T value_or(V&& v) const
+ {
+ return *this ? **this : detail_::convert<T>(constexpr_forward<V>(v));
+ }
+
+# endif
+
+};
+
+
+template <class T>
+class optional<T&>
+{
+ static_assert( !std::is_same<T, nullopt_t>::value, "bad T" );
+ static_assert( !std::is_same<T, in_place_t>::value, "bad T" );
+ T* ref;
+
+public:
+
+ // 20.5.5.1, construction/destruction
+ constexpr optional() noexcept : ref(nullptr) {}
+
+ constexpr optional(nullopt_t) noexcept : ref(nullptr) {}
+
+ constexpr optional(T& v) noexcept : ref(detail_::static_addressof(v)) {}
+
+ optional(T&&) = delete;
+
+ constexpr optional(const optional& rhs) noexcept : ref(rhs.ref) {}
+
+ explicit constexpr optional(in_place_t, T& v) noexcept : ref(detail_::static_addressof(v)) {}
+
+ explicit optional(in_place_t, T&&) = delete;
+
+ ~optional() = default;
+
+ // 20.5.5.2, mutation
+ optional& operator=(nullopt_t) noexcept {
+ ref = nullptr;
+ return *this;
+ }
+
+ // optional& operator=(const optional& rhs) noexcept {
+ // ref = rhs.ref;
+ // return *this;
+ // }
+
+ // optional& operator=(optional&& rhs) noexcept {
+ // ref = rhs.ref;
+ // return *this;
+ // }
+
+ template <typename U>
+ auto operator=(U&& rhs) noexcept
+ -> typename enable_if
+ <
+ is_same<typename decay<U>::type, optional<T&>>::value,
+ optional&
+ >::type
+ {
+ ref = rhs.ref;
+ return *this;
+ }
+
+ template <typename U>
+ auto operator=(U&& rhs) noexcept
+ -> typename enable_if
+ <
+ !is_same<typename decay<U>::type, optional<T&>>::value,
+ optional&
+ >::type
+ = delete;
+
+ void emplace(T& v) noexcept {
+ ref = detail_::static_addressof(v);
+ }
+
+ void emplace(T&&) = delete;
+
+
+ void swap(optional<T&>& rhs) noexcept
+ {
+ std::swap(ref, rhs.ref);
+ }
+
+ // 20.5.5.3, observers
+ constexpr T* operator->() const {
+ return TR2_OPTIONAL_ASSERTED_EXPRESSION(ref, ref);
+ }
+
+ constexpr T& operator*() const {
+ return TR2_OPTIONAL_ASSERTED_EXPRESSION(ref, *ref);
+ }
+
+ constexpr T& value() const {
+ return ref ? *ref : (throw bad_optional_access("bad optional access"), *ref);
+ }
+
+ explicit constexpr operator bool() const noexcept {
+ return ref != nullptr;
+ }
+
+ template <class V>
+ constexpr typename decay<T>::type value_or(V&& v) const
+ {
+ return *this ? **this : detail_::convert<typename decay<T>::type>(constexpr_forward<V>(v));
+ }
+};
+
+
+template <class T>
+class optional<T&&>
+{
+ static_assert( sizeof(T) == 0, "optional rvalue references disallowed" );
+};
+
+
+// 20.5.8, Relational operators
+template <class T> constexpr bool operator==(const optional<T>& x, const optional<T>& y)
+{
+ return bool(x) != bool(y) ? false : bool(x) == false ? true : *x == *y;
+}
+
+template <class T> constexpr bool operator!=(const optional<T>& x, const optional<T>& y)
+{
+ return !(x == y);
+}
+
+template <class T> constexpr bool operator<(const optional<T>& x, const optional<T>& y)
+{
+ return (!y) ? false : (!x) ? true : *x < *y;
+}
+
+template <class T> constexpr bool operator>(const optional<T>& x, const optional<T>& y)
+{
+ return (y < x);
+}
+
+template <class T> constexpr bool operator<=(const optional<T>& x, const optional<T>& y)
+{
+ return !(y < x);
+}
+
+template <class T> constexpr bool operator>=(const optional<T>& x, const optional<T>& y)
+{
+ return !(x < y);
+}
+
+
+// 20.5.9, Comparison with nullopt
+template <class T> constexpr bool operator==(const optional<T>& x, nullopt_t) noexcept
+{
+ return (!x);
+}
+
+template <class T> constexpr bool operator==(nullopt_t, const optional<T>& x) noexcept
+{
+ return (!x);
+}
+
+template <class T> constexpr bool operator!=(const optional<T>& x, nullopt_t) noexcept
+{
+ return bool(x);
+}
+
+template <class T> constexpr bool operator!=(nullopt_t, const optional<T>& x) noexcept
+{
+ return bool(x);
+}
+
+template <class T> constexpr bool operator<(const optional<T>&, nullopt_t) noexcept
+{
+ return false;
+}
+
+template <class T> constexpr bool operator<(nullopt_t, const optional<T>& x) noexcept
+{
+ return bool(x);
+}
+
+template <class T> constexpr bool operator<=(const optional<T>& x, nullopt_t) noexcept
+{
+ return (!x);
+}
+
+template <class T> constexpr bool operator<=(nullopt_t, const optional<T>&) noexcept
+{
+ return true;
+}
+
+template <class T> constexpr bool operator>(const optional<T>& x, nullopt_t) noexcept
+{
+ return bool(x);
+}
+
+template <class T> constexpr bool operator>(nullopt_t, const optional<T>&) noexcept
+{
+ return false;
+}
+
+template <class T> constexpr bool operator>=(const optional<T>&, nullopt_t) noexcept
+{
+ return true;
+}
+
+template <class T> constexpr bool operator>=(nullopt_t, const optional<T>& x) noexcept
+{
+ return (!x);
+}
+
+
+
+// 20.5.10, Comparison with T
+template <class T> constexpr bool operator==(const optional<T>& x, const T& v)
+{
+ return bool(x) ? *x == v : false;
+}
+
+template <class T> constexpr bool operator==(const T& v, const optional<T>& x)
+{
+ return bool(x) ? v == *x : false;
+}
+
+template <class T> constexpr bool operator!=(const optional<T>& x, const T& v)
+{
+ return bool(x) ? *x != v : true;
+}
+
+template <class T> constexpr bool operator!=(const T& v, const optional<T>& x)
+{
+ return bool(x) ? v != *x : true;
+}
+
+template <class T> constexpr bool operator<(const optional<T>& x, const T& v)
+{
+ return bool(x) ? *x < v : true;
+}
+
+template <class T> constexpr bool operator>(const T& v, const optional<T>& x)
+{
+ return bool(x) ? v > *x : true;
+}
+
+template <class T> constexpr bool operator>(const optional<T>& x, const T& v)
+{
+ return bool(x) ? *x > v : false;
+}
+
+template <class T> constexpr bool operator<(const T& v, const optional<T>& x)
+{
+ return bool(x) ? v < *x : false;
+}
+
+template <class T> constexpr bool operator>=(const optional<T>& x, const T& v)
+{
+ return bool(x) ? *x >= v : false;
+}
+
+template <class T> constexpr bool operator<=(const T& v, const optional<T>& x)
+{
+ return bool(x) ? v <= *x : false;
+}
+
+template <class T> constexpr bool operator<=(const optional<T>& x, const T& v)
+{
+ return bool(x) ? *x <= v : true;
+}
+
+template <class T> constexpr bool operator>=(const T& v, const optional<T>& x)
+{
+ return bool(x) ? v >= *x : true;
+}
+
+
+// Comparison of optional<T&> with T
+template <class T> constexpr bool operator==(const optional<T&>& x, const T& v)
+{
+ return bool(x) ? *x == v : false;
+}
+
+template <class T> constexpr bool operator==(const T& v, const optional<T&>& x)
+{
+ return bool(x) ? v == *x : false;
+}
+
+template <class T> constexpr bool operator!=(const optional<T&>& x, const T& v)
+{
+ return bool(x) ? *x != v : true;
+}
+
+template <class T> constexpr bool operator!=(const T& v, const optional<T&>& x)
+{
+ return bool(x) ? v != *x : true;
+}
+
+template <class T> constexpr bool operator<(const optional<T&>& x, const T& v)
+{
+ return bool(x) ? *x < v : true;
+}
+
+template <class T> constexpr bool operator>(const T& v, const optional<T&>& x)
+{
+ return bool(x) ? v > *x : true;
+}
+
+template <class T> constexpr bool operator>(const optional<T&>& x, const T& v)
+{
+ return bool(x) ? *x > v : false;
+}
+
+template <class T> constexpr bool operator<(const T& v, const optional<T&>& x)
+{
+ return bool(x) ? v < *x : false;
+}
+
+template <class T> constexpr bool operator>=(const optional<T&>& x, const T& v)
+{
+ return bool(x) ? *x >= v : false;
+}
+
+template <class T> constexpr bool operator<=(const T& v, const optional<T&>& x)
+{
+ return bool(x) ? v <= *x : false;
+}
+
+template <class T> constexpr bool operator<=(const optional<T&>& x, const T& v)
+{
+ return bool(x) ? *x <= v : true;
+}
+
+template <class T> constexpr bool operator>=(const T& v, const optional<T&>& x)
+{
+ return bool(x) ? v >= *x : true;
+}
+
+// Comparison of optional<T const&> with T
+template <class T> constexpr bool operator==(const optional<const T&>& x, const T& v)
+{
+ return bool(x) ? *x == v : false;
+}
+
+template <class T> constexpr bool operator==(const T& v, const optional<const T&>& x)
+{
+ return bool(x) ? v == *x : false;
+}
+
+template <class T> constexpr bool operator!=(const optional<const T&>& x, const T& v)
+{
+ return bool(x) ? *x != v : true;
+}
+
+template <class T> constexpr bool operator!=(const T& v, const optional<const T&>& x)
+{
+ return bool(x) ? v != *x : true;
+}
+
+template <class T> constexpr bool operator<(const optional<const T&>& x, const T& v)
+{
+ return bool(x) ? *x < v : true;
+}
+
+template <class T> constexpr bool operator>(const T& v, const optional<const T&>& x)
+{
+ return bool(x) ? v > *x : true;
+}
+
+template <class T> constexpr bool operator>(const optional<const T&>& x, const T& v)
+{
+ return bool(x) ? *x > v : false;
+}
+
+template <class T> constexpr bool operator<(const T& v, const optional<const T&>& x)
+{
+ return bool(x) ? v < *x : false;
+}
+
+template <class T> constexpr bool operator>=(const optional<const T&>& x, const T& v)
+{
+ return bool(x) ? *x >= v : false;
+}
+
+template <class T> constexpr bool operator<=(const T& v, const optional<const T&>& x)
+{
+ return bool(x) ? v <= *x : false;
+}
+
+template <class T> constexpr bool operator<=(const optional<const T&>& x, const T& v)
+{
+ return bool(x) ? *x <= v : true;
+}
+
+template <class T> constexpr bool operator>=(const T& v, const optional<const T&>& x)
+{
+ return bool(x) ? v >= *x : true;
+}
+
+
+// 20.5.12, Specialized algorithms
+template <class T>
+void swap(optional<T>& x, optional<T>& y) noexcept(noexcept(x.swap(y)))
+{
+ x.swap(y);
+}
+
+
+template <class T>
+constexpr optional<typename decay<T>::type> make_optional(T&& v)
+{
+ return optional<typename decay<T>::type>(constexpr_forward<T>(v));
+}
+
+template <class X>
+constexpr optional<X&> make_optional(reference_wrapper<X> v)
+{
+ return optional<X&>(v.get());
+}
+
+} // namespace Ice
+} // namespace experimental
+} // namespace std
+
+namespace std
+{
+ template <typename T>
+ struct hash<std::experimental::Ice::optional<T>>
+ {
+ typedef typename hash<T>::result_type result_type;
+ typedef std::experimental::Ice::optional<T> argument_type;
+
+ constexpr result_type operator()(argument_type const& arg) const {
+ return arg ? std::hash<T>{}(*arg) : result_type{};
+ }
+ };
+
+ template <typename T>
+ struct hash<std::experimental::Ice::optional<T&>>
+ {
+ typedef typename hash<T>::result_type result_type;
+ typedef std::experimental::Ice::optional<T&> argument_type;
+
+ constexpr result_type operator()(argument_type const& arg) const {
+ return arg ? std::hash<T>{}(*arg) : result_type{};
+ }
+ };
+}
+
+# undef TR2_OPTIONAL_REQUIRES
+# undef TR2_OPTIONAL_ASSERTED_EXPRESSION
+
+namespace Ice{
+
+template<class T> using optional = std::experimental::Ice::optional<T>;
+
+using std::experimental::Ice::operator==;
+using std::experimental::Ice::operator!=;
+using std::experimental::Ice::operator<;
+using std::experimental::Ice::operator<=;
+using std::experimental::Ice::operator>;
+using std::experimental::Ice::operator>=;
+
+using std::experimental::Ice::make_optional;
+using std::experimental::Ice::swap;
+
+using nullopt_t = std::experimental::Ice::nullopt_t;
+using std::experimental::Ice::nullopt;
+
+using bad_optional_access = std::experimental::Ice::bad_optional_access;
+
+using in_place_t = std::experimental::Ice::in_place_t;
+using std::experimental::Ice::in_place;
+
+}
+
+//
+// For compatibility with the Ice C++98 mapping, do not use in new code:
+//
+namespace IceUtil{
+
+template<class T> using Optional = std::experimental::Ice::optional<T>;
+constexpr std::experimental::Ice::nullopt_t None{std::experimental::Ice::nullopt_t::init()};
+
+}
+
+#else // C++98 mapping
+
+# include <IceUtil/Optional.h>
+
+#endif
+
+#endif
diff --git a/cpp/include/IceUtil/Optional.h b/cpp/include/IceUtil/Optional.h
index 0a94556825e..60493e30fe3 100644
--- a/cpp/include/IceUtil/Optional.h
+++ b/cpp/include/IceUtil/Optional.h
@@ -10,6 +10,8 @@
#ifndef ICE_UTIL_OPTIONAL_H
#define ICE_UTIL_OPTIONAL_H
+#ifndef ICE_CPP11_MAPPING
+
#include <IceUtil/Config.h>
namespace IceUtilInternal
@@ -85,33 +87,44 @@ public:
return *this;
}
- const T& get() const
+ const T& value() const
{
checkIsSet();
return _value;
}
- T& get()
+
+ T& value()
{
checkIsSet();
return _value;
}
+ const T& get() const
+ {
+ return value();
+ }
+
+ T& get()
+ {
+ return value();
+ }
+
const T* operator->() const
{
- return &get();
+ return &value();
}
T* operator->()
{
- return &get();
+ return &value();
}
const T& operator*() const
{
- return get();
+ return value();
}
T& operator*()
{
- return get();
+ return value();
}
operator bool() const
@@ -320,3 +333,4 @@ inline bool operator>=(const Y& lhs, const Optional<T>& rhs)
}
#endif
+#endif
diff --git a/cpp/msbuild/ice.test.sln b/cpp/msbuild/ice.test.sln
index 81b83a5bbab..a31068e48f6 100644
--- a/cpp/msbuild/ice.test.sln
+++ b/cpp/msbuild/ice.test.sln
@@ -2063,9 +2063,13 @@ Global
{306B9C8B-F11B-4071-AE80-CF69EF0BBB2B}.Release|x64.ActiveCfg = Release|x64
{306B9C8B-F11B-4071-AE80-CF69EF0BBB2B}.Release|x64.Build.0 = Release|x64
{A82A6A91-4EEC-4F0A-BA2D-A689BDCDA9C2}.Cpp11-Debug|Win32.ActiveCfg = Cpp11-Debug|Win32
+ {A82A6A91-4EEC-4F0A-BA2D-A689BDCDA9C2}.Cpp11-Debug|Win32.Build.0 = Cpp11-Debug|Win32
{A82A6A91-4EEC-4F0A-BA2D-A689BDCDA9C2}.Cpp11-Debug|x64.ActiveCfg = Cpp11-Debug|x64
+ {A82A6A91-4EEC-4F0A-BA2D-A689BDCDA9C2}.Cpp11-Debug|x64.Build.0 = Cpp11-Debug|x64
{A82A6A91-4EEC-4F0A-BA2D-A689BDCDA9C2}.Cpp11-Release|Win32.ActiveCfg = Cpp11-Release|Win32
+ {A82A6A91-4EEC-4F0A-BA2D-A689BDCDA9C2}.Cpp11-Release|Win32.Build.0 = Cpp11-Release|Win32
{A82A6A91-4EEC-4F0A-BA2D-A689BDCDA9C2}.Cpp11-Release|x64.ActiveCfg = Cpp11-Release|x64
+ {A82A6A91-4EEC-4F0A-BA2D-A689BDCDA9C2}.Cpp11-Release|x64.Build.0 = Cpp11-Release|x64
{A82A6A91-4EEC-4F0A-BA2D-A689BDCDA9C2}.Debug|Win32.ActiveCfg = Debug|Win32
{A82A6A91-4EEC-4F0A-BA2D-A689BDCDA9C2}.Debug|Win32.Build.0 = Debug|Win32
{A82A6A91-4EEC-4F0A-BA2D-A689BDCDA9C2}.Debug|x64.ActiveCfg = Debug|x64
@@ -2075,9 +2079,13 @@ Global
{A82A6A91-4EEC-4F0A-BA2D-A689BDCDA9C2}.Release|x64.ActiveCfg = Release|x64
{A82A6A91-4EEC-4F0A-BA2D-A689BDCDA9C2}.Release|x64.Build.0 = Release|x64
{E64764EB-2B8E-454F-9635-0729D07CCA24}.Cpp11-Debug|Win32.ActiveCfg = Cpp11-Debug|Win32
+ {E64764EB-2B8E-454F-9635-0729D07CCA24}.Cpp11-Debug|Win32.Build.0 = Cpp11-Debug|Win32
{E64764EB-2B8E-454F-9635-0729D07CCA24}.Cpp11-Debug|x64.ActiveCfg = Cpp11-Debug|x64
+ {E64764EB-2B8E-454F-9635-0729D07CCA24}.Cpp11-Debug|x64.Build.0 = Cpp11-Debug|x64
{E64764EB-2B8E-454F-9635-0729D07CCA24}.Cpp11-Release|Win32.ActiveCfg = Cpp11-Release|Win32
+ {E64764EB-2B8E-454F-9635-0729D07CCA24}.Cpp11-Release|Win32.Build.0 = Cpp11-Release|Win32
{E64764EB-2B8E-454F-9635-0729D07CCA24}.Cpp11-Release|x64.ActiveCfg = Cpp11-Release|x64
+ {E64764EB-2B8E-454F-9635-0729D07CCA24}.Cpp11-Release|x64.Build.0 = Cpp11-Release|x64
{E64764EB-2B8E-454F-9635-0729D07CCA24}.Debug|Win32.ActiveCfg = Debug|Win32
{E64764EB-2B8E-454F-9635-0729D07CCA24}.Debug|Win32.Build.0 = Debug|Win32
{E64764EB-2B8E-454F-9635-0729D07CCA24}.Debug|x64.ActiveCfg = Debug|x64
@@ -2087,9 +2095,13 @@ Global
{E64764EB-2B8E-454F-9635-0729D07CCA24}.Release|x64.ActiveCfg = Release|x64
{E64764EB-2B8E-454F-9635-0729D07CCA24}.Release|x64.Build.0 = Release|x64
{9D99D6A3-3087-4B6B-BF7E-AD1D8BB9BEDA}.Cpp11-Debug|Win32.ActiveCfg = Cpp11-Debug|Win32
+ {9D99D6A3-3087-4B6B-BF7E-AD1D8BB9BEDA}.Cpp11-Debug|Win32.Build.0 = Cpp11-Debug|Win32
{9D99D6A3-3087-4B6B-BF7E-AD1D8BB9BEDA}.Cpp11-Debug|x64.ActiveCfg = Cpp11-Debug|x64
+ {9D99D6A3-3087-4B6B-BF7E-AD1D8BB9BEDA}.Cpp11-Debug|x64.Build.0 = Cpp11-Debug|x64
{9D99D6A3-3087-4B6B-BF7E-AD1D8BB9BEDA}.Cpp11-Release|Win32.ActiveCfg = Cpp11-Release|Win32
+ {9D99D6A3-3087-4B6B-BF7E-AD1D8BB9BEDA}.Cpp11-Release|Win32.Build.0 = Cpp11-Release|Win32
{9D99D6A3-3087-4B6B-BF7E-AD1D8BB9BEDA}.Cpp11-Release|x64.ActiveCfg = Cpp11-Release|x64
+ {9D99D6A3-3087-4B6B-BF7E-AD1D8BB9BEDA}.Cpp11-Release|x64.Build.0 = Cpp11-Release|x64
{9D99D6A3-3087-4B6B-BF7E-AD1D8BB9BEDA}.Debug|Win32.ActiveCfg = Debug|Win32
{9D99D6A3-3087-4B6B-BF7E-AD1D8BB9BEDA}.Debug|Win32.Build.0 = Debug|Win32
{9D99D6A3-3087-4B6B-BF7E-AD1D8BB9BEDA}.Debug|x64.ActiveCfg = Debug|x64
diff --git a/cpp/src/Slice/CPlusPlusUtil.cpp b/cpp/src/Slice/CPlusPlusUtil.cpp
index 57fdf1bf2ff..dd282d5b68e 100644
--- a/cpp/src/Slice/CPlusPlusUtil.cpp
+++ b/cpp/src/Slice/CPlusPlusUtil.cpp
@@ -49,6 +49,26 @@ string toTemplateArg(const string& arg)
}
string
+toOptional(const string& s, int typeCtx)
+{
+ bool cpp11 = (typeCtx & TypeContextCpp11) != 0;
+ string result = cpp11 ? "Ice::optional" : "IceUtil::Optional";
+ result += '<';
+ if(cpp11)
+ {
+ result += s;
+ }
+ else
+ {
+ result += toTemplateArg(s);
+ }
+
+ result += '>';
+ return result;
+}
+
+
+string
stringTypeToString(const TypePtr& type, const StringList& metaData, int typeCtx)
{
string strType = findMetaData(metaData, typeCtx);
@@ -98,7 +118,7 @@ sequenceTypeToString(const SequencePtr& seq, const StringList& metaData, int typ
return "::std::vector<" + s + '>';
}
}
- string s = typeToString(seq->type(), seq->typeMetaData(), inWstringModule(seq) ? TypeContextUseWstring : 0);
+ string s = typeToString(seq->type(), seq->typeMetaData(), typeCtx | (inWstringModule(seq) ? TypeContextUseWstring : 0));
return "::std::pair<const " + s + "*, const " + s + "*>";
}
else if(seqType.find("%range") == 0)
@@ -154,7 +174,7 @@ writeParamAllocateCode(Output& out, const TypePtr& type, bool optional, const st
string s = typeToString(type, metaData, typeCtx);
if(optional)
{
- s = "IceUtil::Optional<" + toTemplateArg(s) + '>';
+ s = toOptional(s, typeCtx);
}
out << nl << s << ' ' << fixedName << ';';
@@ -195,7 +215,7 @@ writeParamAllocateCode(Output& out, const TypePtr& type, bool optional, const st
{
if(optional)
{
- s = "IceUtil::Optional<" + toTemplateArg(s) + '>';
+ s = toOptional(s, typeCtx);
}
out << nl << s << " ___" << fixedName << ";";
}
@@ -746,7 +766,7 @@ Slice::typeToString(const TypePtr& type, bool optional, const StringList& metaDa
{
if(optional)
{
- return "IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx)) + ">";
+ return toOptional(typeToString(type, metaData, typeCtx), typeCtx);
}
else
{
@@ -764,7 +784,7 @@ Slice::returnTypeToString(const TypePtr& type, bool optional, const StringList&
if(optional)
{
- return "IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx)) + ">";
+ return toOptional(typeToString(type, metaData, typeCtx), typeCtx);
}
return typeToString(type, metaData, typeCtx);
@@ -811,7 +831,7 @@ Slice::inputTypeToString(const TypePtr& type, bool optional, const StringList& m
if(optional)
{
- return "const IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx)) +">&";
+ return "const " + toOptional(typeToString(type, metaData, typeCtx), typeCtx) + '&';
}
BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
@@ -819,7 +839,7 @@ Slice::inputTypeToString(const TypePtr& type, bool optional, const StringList& m
{
if(builtin->kind() == Builtin::KindString)
{
- return string("const ") + stringTypeToString(type, metaData, typeCtx) + "&";
+ return string("const ") + stringTypeToString(type, metaData, typeCtx) + '&';
}
else
{
@@ -972,7 +992,7 @@ Slice::outputTypeToString(const TypePtr& type, bool optional, const StringList&
if(optional)
{
- return "IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx)) +">&";
+ return toOptional(typeToString(type, metaData, typeCtx), typeCtx) + '&';
}
BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp
index 4ee6807b16b..6b64c5832b1 100644
--- a/cpp/src/slice2cpp/Gen.cpp
+++ b/cpp/src/slice2cpp/Gen.cpp
@@ -811,7 +811,7 @@ Slice::Gen::generate(const UnitPtr& p)
}
H << "\n#include <IceUtil/ScopedArray.h>";
- H << "\n#include <IceUtil/Optional.h>";
+ H << "\n#include <Ice/Optional.h>";
if(p->hasExceptions())
{
@@ -5937,8 +5937,21 @@ Slice::Gen::Cpp11TypesVisitor::visitDataMember(const DataMemberPtr& p)
string defaultValue = p->defaultValue();
if(!defaultValue.empty())
{
- H << " = ";
- writeConstantValue(H, p->type(), p->defaultValueType(), defaultValue, _useWstring, p->getMetaData(), true);
+ BuiltinPtr builtin = BuiltinPtr::dynamicCast(p->type());
+ if(p->optional() && builtin->kind() == Builtin::KindString)
+ {
+ //
+ // = "<string literal>" doesn't work for optional<std::string>
+ //
+ H << '{';
+ writeConstantValue(H, p->type(), p->defaultValueType(), defaultValue, _useWstring, p->getMetaData(), true);
+ H << '}';
+ }
+ else
+ {
+ H << " = ";
+ writeConstantValue(H, p->type(), p->defaultValueType(), defaultValue, _useWstring, p->getMetaData(), true);
+ }
}
H << ';';
@@ -6603,8 +6616,21 @@ Slice::Gen::Cpp11ObjectVisitor::emitDataMember(const DataMemberPtr& p)
string defaultValue = p->defaultValue();
if(!defaultValue.empty())
{
- H << " = ";
- writeConstantValue(H, p->type(), p->defaultValueType(), defaultValue, _useWstring, p->getMetaData(), true);
+ BuiltinPtr builtin = BuiltinPtr::dynamicCast(p->type());
+ if(p->optional() && builtin->kind() == Builtin::KindString)
+ {
+ //
+ // = "<string literal>" doesn't work for optional<std::string>
+ //
+ H << '{';
+ writeConstantValue(H, p->type(), p->defaultValueType(), defaultValue, _useWstring, p->getMetaData(), true);
+ H << '}';
+ }
+ else
+ {
+ H << " = ";
+ writeConstantValue(H, p->type(), p->defaultValueType(), defaultValue, _useWstring, p->getMetaData(), true);
+ }
}
H << ";";
}
@@ -7593,7 +7619,6 @@ Slice::Gen::Cpp11ValueVisitor::visitClassDefStart(const ClassDefPtr& p)
H.inc();
// Out of line dtor to avoid weak vtable
- H << sp;
H << nl << _dllMemberExport << "virtual ~" << name << "();";
C << sp;
C << nl << scoped.substr(2) << "::~" << name << "()";
diff --git a/cpp/test/Ice/optional/AllTests.cpp b/cpp/test/Ice/optional/AllTests.cpp
index fe12b5fbe8a..a3fbd96a8ee 100644
--- a/cpp/test/Ice/optional/AllTests.cpp
+++ b/cpp/test/Ice/optional/AllTests.cpp
@@ -11,9 +11,38 @@
#include <TestCommon.h>
#include <Test.h>
+#ifdef ICE_CPP11_MAPPING
+namespace Test
+{
+using OneOptionalPrx = Ice::ObjectPrx;
+using OneOptionalPrxPtr = ::std::shared_ptr<Ice::ObjectPrx>;
+using MultiOptionalPrx = Ice::ObjectPrx;
+}
+#endif
+
using namespace std;
using namespace Test;
+namespace
+{
+
+//
+// Converts a vector to an "array range"
+//
+template<typename T> pair<const T*, const T*>
+toArrayRange(const vector<T>& v)
+{
+ return make_pair(&v[0], &v[0] + v.size());
+}
+
+template<typename T> pair<const T*, const T*>
+toArrayRange(const T* v, size_t sz)
+{
+ return make_pair(v, v + sz);
+}
+
+}
+
#ifdef ICE_CPP11_MAPPING
class TestObjectReader : public Ice::Value
#else
@@ -30,6 +59,18 @@ public:
in->endSlice();
in->endValue(false);
}
+
+#ifdef ICE_CPP11_MAPPING
+
+protected:
+
+ virtual std::shared_ptr<Value> cloneImpl() const
+ {
+ assert(0); // not used
+ return nullptr;
+ }
+
+#endif
};
#ifdef ICE_CPP11_MAPPING
@@ -55,6 +96,18 @@ public:
in->endSlice();
in->endValue(false);
}
+
+#ifdef ICE_CPP11_MAPPING
+
+protected:
+
+ virtual std::shared_ptr<Value> cloneImpl() const
+ {
+ assert(0); // not used
+ return nullptr;
+ }
+
+#endif
};
#ifdef ICE_CPP11_MAPPING
@@ -83,6 +136,18 @@ public:
in->endSlice();
in->endValue(false);
}
+
+#ifdef ICE_CPP11_MAPPING
+
+protected:
+
+ virtual std::shared_ptr<Value> cloneImpl() const
+ {
+ assert(0); // not used
+ return nullptr;
+ }
+
+#endif
};
#ifdef ICE_CPP11_MAPPING
@@ -107,7 +172,7 @@ public:
o->push_back("test3");
o->push_back("test4");
out->write(1, o);
- APtr a = new A();
+ APtr a = ICE_MAKE_SHARED(A);
a->mc = 18;
out->write(1000, IceUtil::Optional<APtr>(a));
out->endSlice();
@@ -124,6 +189,19 @@ public:
}
virtual void __read(Ice::InputStream*) { }
+
+#ifdef ICE_CPP11_MAPPING
+
+protected:
+
+ virtual std::shared_ptr<Value> cloneImpl() const
+ {
+ assert(0); // not used
+ return nullptr;
+ }
+
+#endif
+
};
#ifdef ICE_CPP11_MAPPING
@@ -166,6 +244,18 @@ public:
test((*a)->mc == 18);
}
+#ifdef ICE_CPP11_MAPPING
+
+protected:
+
+ virtual std::shared_ptr<Value> cloneImpl() const
+ {
+ assert(0); // not used
+ return nullptr;
+ }
+
+#endif
+
private:
IceUtil::Optional<APtr> a;
@@ -182,7 +272,7 @@ public:
virtual void __read(Ice::InputStream* in)
{
- _f = new F();
+ _f = ICE_MAKE_SHARED(F);
in->startValue();
in->startSlice();
// Don't read af on purpose
@@ -200,12 +290,29 @@ public:
return _f;
}
+#ifdef ICE_CPP11_MAPPING
+
+protected:
+
+ virtual std::shared_ptr<Value> cloneImpl() const
+ {
+ assert(0); // not used
+ return nullptr;
+ }
+
+#endif
+
private:
FPtr _f;
};
-class FactoryI : public Ice::ValueFactory
+
+class FactoryI
+#ifndef ICE_CPP11_MAPPING
+ : public Ice::ValueFactory
+#endif
+
{
bool _enabled;
@@ -215,7 +322,7 @@ public:
{
}
- Ice::ObjectPtr
+ Ice::ValuePtr
create(const string& typeId)
{
if(!_enabled)
@@ -225,27 +332,27 @@ public:
if(typeId == "::Test::OneOptional")
{
- return new TestObjectReader;
+ return ICE_MAKE_SHARED(TestObjectReader);
}
else if(typeId == "::Test::MultiOptional")
{
- return new TestObjectReader;
+ return ICE_MAKE_SHARED(TestObjectReader);
}
else if(typeId == "::Test::B")
{
- return new BObjectReader;
+ return ICE_MAKE_SHARED(BObjectReader);
}
else if(typeId == "::Test::C")
{
- return new CObjectReader;
+ return ICE_MAKE_SHARED(CObjectReader);
}
else if(typeId == "::Test::D")
{
- return new DObjectReader;
+ return ICE_MAKE_SHARED(DObjectReader);
}
else if(typeId == "::Test::F")
{
- return new FObjectReader;
+ return ICE_MAKE_SHARED(FObjectReader);
}
return 0;
@@ -257,48 +364,63 @@ public:
_enabled = enabled;
}
};
+
+#ifdef ICE_CPP11_MAPPING
+using FactoryIPtr = shared_ptr<FactoryI>;
+#else
typedef IceUtil::Handle<FactoryI> FactoryIPtr;
+#endif
-InitialPrx
+InitialPrxPtr
allTests(const Ice::CommunicatorPtr& communicator, bool)
{
- FactoryIPtr factory = new FactoryI();
+ FactoryIPtr factory = ICE_MAKE_SHARED(FactoryI);
+
+#ifdef ICE_CPP11_MAPPING
+ communicator->getValueFactoryManager()->add([factory](const string& typeId) { return factory->create(typeId); }, "");
+#else
communicator->getValueFactoryManager()->add(factory, "");
+#endif
cout << "testing stringToProxy... " << flush;
string ref = "initial:" + getTestEndpoint(communicator, 0);
- Ice::ObjectPrx base = communicator->stringToProxy(ref);
+ Ice::ObjectPrxPtr base = communicator->stringToProxy(ref);
test(base);
cout << "ok" << endl;
cout << "testing checked cast... " << flush;
- InitialPrx initial = InitialPrx::checkedCast(base);
+ InitialPrxPtr initial = ICE_CHECKED_CAST(InitialPrx, base);
test(initial);
+
+#ifdef ICE_CPP11_MAPPING
+ test(targetEquals(initial, base));
+#else
test(initial == base);
+#endif
bool supportsCppStringView = initial->supportsCppStringView();
cout << "ok" << endl;
cout << "testing constructor, copy constructor, and assignment operator... " << flush;
- OneOptionalPtr oo1 = new OneOptional();
+ OneOptionalPtr oo1 = ICE_MAKE_SHARED(OneOptional);
test(!oo1->a);
oo1->a = 15;
test(oo1->a && *oo1->a == 15);
- OneOptionalPtr oo2 = new OneOptional(16);
+ OneOptionalPtr oo2 = ICE_MAKE_SHARED(OneOptional, 16);
test(oo2->a && *oo2->a == 16);
- OneOptionalPtr oo3 = new OneOptional(*oo2);
+ OneOptionalPtr oo3 = ICE_MAKE_SHARED(OneOptional, *oo2);
test(oo3->a && *oo3->a == 16);
*oo3 = *oo1;
test(oo3->a && *oo3->a == 15);
- OneOptionalPtr oon = new OneOptional(IceUtil::None);
+ OneOptionalPtr oon = ICE_MAKE_SHARED(OneOptional, IceUtil::None);
test(!oon->a);
- MultiOptionalPtr mo1 = new MultiOptional();
+ MultiOptionalPtr mo1 = ICE_MAKE_SHARED(MultiOptional);
mo1->a = 15;
mo1->b = true;
mo1->c = 19;
@@ -306,9 +428,9 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
mo1->e = 99;
mo1->f = 5.5f;
mo1->g = 1.0;
- mo1->h = "test";
- mo1->i = Test::MyEnumMember;
- mo1->j = MultiOptionalPrx::uncheckedCast(communicator->stringToProxy("test"));
+ mo1->h = string("test");
+ mo1->i = ICE_ENUM(MyEnum, MyEnumMember);
+ mo1->j = ICE_UNCHECKED_CAST(MultiOptionalPrx, communicator->stringToProxy("test"));
mo1->k = mo1;
mo1->bs = ByteSeq();
(*mo1->bs).push_back(5);
@@ -329,8 +451,8 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
mo1->shs = ShortSeq();
mo1->shs->push_back(1);
mo1->es = MyEnumSeq();
- mo1->es->push_back(MyEnumMember);
- mo1->es->push_back(MyEnumMember);
+ mo1->es->push_back(ICE_ENUM(MyEnum, MyEnumMember));
+ mo1->es->push_back(ICE_ENUM(MyEnum, MyEnumMember));
mo1->fss = FixedStructSeq();
mo1->fss->push_back(fs);
mo1->vss = VarStructSeq();
@@ -338,41 +460,44 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
mo1->oos = OneOptionalSeq();
mo1->oos->push_back(oo1);
mo1->oops = OneOptionalPrxSeq();
- mo1->oops->push_back(OneOptionalPrx::uncheckedCast(communicator->stringToProxy("test")));
+ mo1->oops->push_back(ICE_UNCHECKED_CAST(OneOptionalPrx, communicator->stringToProxy("test")));
mo1->ied = IntEnumDict();
- mo1->ied.get()[4] = MyEnumMember;
+ mo1->ied.value()[4] = ICE_ENUM(MyEnum, MyEnumMember);
mo1->ifsd = IntFixedStructDict();
- mo1->ifsd.get()[4] = fs;
+ mo1->ifsd.value()[4] = fs;
mo1->ivsd = IntVarStructDict();
- mo1->ivsd.get()[5] = vs;
+ mo1->ivsd.value()[5] = vs;
mo1->iood = IntOneOptionalDict();
- mo1->iood.get()[5] = new OneOptional();
- mo1->iood.get()[5]->a = 15;
+ mo1->iood.value()[5] = ICE_MAKE_SHARED(OneOptional);
+ mo1->iood.value()[5]->a = 15;
mo1->ioopd = IntOneOptionalPrxDict();
- mo1->ioopd.get()[5] = OneOptionalPrx::uncheckedCast(communicator->stringToProxy("test"));
+ mo1->ioopd.value()[5] = ICE_UNCHECKED_CAST(OneOptionalPrx, communicator->stringToProxy("test"));
mo1->bos = BoolSeq();
mo1->bos->push_back(false);
mo1->bos->push_back(true);
mo1->bos->push_back(false);
+
+#ifndef ICE_CPP11_MAPPING
mo1->ice_collectable(true);
+#endif
- MultiOptionalPtr mo2 = new MultiOptional(*mo1);
+ MultiOptionalPtr mo2 = ICE_MAKE_SHARED(MultiOptional, *mo1);
- MultiOptionalPtr mo3 = new MultiOptional();
+ MultiOptionalPtr mo3 = ICE_MAKE_SHARED(MultiOptional);
*mo3 = *mo2;
- test(mo3->a == 15);
+ test(mo3->a == static_cast<Ice::Byte>(15));
test(mo3->b == true);
- test(mo3->c == 19);
+ test(mo3->c == static_cast<short>(19));
test(mo3->d == 78);
- test(mo3->e == 99);
+ test(mo3->e == static_cast<Ice::Long>(99));
test(mo3->f == 5.5f);
test(mo3->g == 1.0);
- test(mo3->h == "test");
- test(mo3->i == Test::MyEnumMember);
- test(mo3->j == MultiOptionalPrx::uncheckedCast(communicator->stringToProxy("test")));
+ test(mo3->h == string("test"));
+ test(mo3->i = ICE_ENUM(MyEnum, MyEnumMember));
+ test(mo3->j = ICE_UNCHECKED_CAST(MultiOptionalPrx, communicator->stringToProxy("test")));
test(mo3->k == mo1);
test(mo3->bs == mo1->bs);
test(mo3->ss == mo1->ss);
@@ -400,28 +525,31 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
cout << "testing comparison operators... " << flush;
- test(mo1->a == 15 && 15 == mo1->a && mo1->a != 16 && 16 != mo1->a);
- test(mo1->a < 16 && mo1->a > 14 && mo1->a <= 15 && mo1->a >= 15 && mo1->a <= 16 && mo1->a >= 14);
- test(mo1->a > IceUtil::Optional<int>() && IceUtil::Optional<int>() < mo1->a);
+ test(mo1->a == static_cast<Ice::Byte>(15) && static_cast<Ice::Byte>(15) == mo1->a &&
+ mo1->a != static_cast<Ice::Byte>(16) && static_cast<Ice::Byte>(16) != mo1->a);
+ test(mo1->a < static_cast<Ice::Byte>(16) && mo1->a > static_cast<Ice::Byte>(14) &&
+ mo1->a <= static_cast<Ice::Byte>(15) && mo1->a >= static_cast<Ice::Byte>(15) &&
+ mo1->a <= static_cast<Ice::Byte>(16) && mo1->a >= static_cast<Ice::Byte>(14));
+ test(mo1->a > IceUtil::Optional<Ice::Byte>() && IceUtil::Optional<Ice::Byte>() < mo1->a);
test(14 > IceUtil::Optional<int>() && IceUtil::Optional<int>() < 14);
- test(mo1->h == "test" && "test" == mo1->h && mo1->h != "testa" && "testa" != mo1->h);
- test(mo1->h < "test1" && mo1->h > "tesa" && mo1->h <= "test");
- test(mo1->h >= "test" && mo1->h <= "test1" && mo1->h >= "tesa");
+ test(mo1->h == string("test") && string("test") == mo1->h && mo1->h != string("testa") && string("testa") != mo1->h);
+ test(mo1->h < string("test1") && mo1->h > string("tesa") && mo1->h <= string("test"));
+ test(mo1->h >= string("test") && mo1->h <= string("test1") && mo1->h >= string("tesa"));
test(mo1->h > IceUtil::Optional<string>() && IceUtil::Optional<string>() < mo1->h);
- test("test1" > IceUtil::Optional<string>() && IceUtil::Optional<string>() < "test1");
+ test(string("test1") > IceUtil::Optional<string>() && IceUtil::Optional<string>() < string("test1"));
cout << "ok" << endl;
cout << "testing marshalling... " << flush;
- OneOptionalPtr oo4 = OneOptionalPtr::dynamicCast(initial->pingPong(new OneOptional()));
+ OneOptionalPtr oo4 = ICE_DYNAMIC_CAST(OneOptional, initial->pingPong(ICE_MAKE_SHARED(OneOptional)));
test(!oo4->a);
- OneOptionalPtr oo5 = OneOptionalPtr::dynamicCast(initial->pingPong(oo1));
+ OneOptionalPtr oo5 = ICE_DYNAMIC_CAST(OneOptional, initial->pingPong(oo1));
test(oo1->a == oo5->a);
- MultiOptionalPtr mo4 = MultiOptionalPtr::dynamicCast(initial->pingPong(new MultiOptional()));
+ MultiOptionalPtr mo4 = ICE_DYNAMIC_CAST(MultiOptional, initial->pingPong(ICE_MAKE_SHARED(MultiOptional)));
test(!mo4->a);
test(!mo4->b);
test(!mo4->c);
@@ -456,7 +584,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
test(!mo4->bos);
mo1->k = mo1;
- MultiOptionalPtr mo5 = MultiOptionalPtr::dynamicCast(initial->pingPong(mo1));
+ MultiOptionalPtr mo5 = ICE_DYNAMIC_CAST(MultiOptional, initial->pingPong(mo1));
test(mo5->a == mo1->a);
test(mo5->b == mo1->b);
test(mo5->c == mo1->c);
@@ -466,7 +594,11 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
test(mo5->g == mo1->g);
test(mo5->h == mo1->h);
test(mo5->i == mo1->i);
+#ifdef ICE_CPP11_MAPPING
+ test(targetEquals(mo5->j.value(), mo1->j.value()));
+#else
test(mo5->j == mo1->j);
+#endif
test(mo5->k == mo5->k);
test(mo5->bs == mo1->bs);
test(mo5->ss == mo1->ss);
@@ -480,18 +612,36 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
test(mo5->fss == mo1->fss);
test(mo5->vss == mo1->vss);
test(!mo5->oos->empty() && (*mo5->oos)[0]->a == oo1->a);
+
+#ifdef ICE_CPP11_MAPPING
+ test(mo5->oops.value().size() == mo1->oops.value().size());
+ for(size_t i = 0; i< mo5->oops.value().size(); ++i)
+ {
+ test(targetEquals(mo5->oops.value()[i], mo1->oops.value()[i]));
+ }
+#else
test(mo5->oops == mo1->oops);
+#endif
test(mo5->ied == mo1->ied);
test(mo5->ifsd == mo1->ifsd);
test(mo5->ivsd == mo1->ivsd);
test(!mo5->iood->empty() && (*mo5->iood)[5]->a == 15);
+
+#ifdef ICE_CPP11_MAPPING
+ test(mo5->ioopd.value().size() == mo1->ioopd.value().size());
+ for(auto& v : mo5->ioopd.value())
+ {
+ test(targetEquals(mo1->ioopd.value()[v.first], v.second));
+ }
+#else
test(mo5->ioopd == mo1->ioopd);
+#endif
test(mo5->bos == mo1->bos);
// Clear the first half of the optional parameters
- MultiOptionalPtr mo6 = new MultiOptional(*mo5);
+ MultiOptionalPtr mo6 = ICE_MAKE_SHARED(MultiOptional, *mo5);
mo6->a = IceUtil::None;
mo6->c = IceUtil::None;
mo6->e = IceUtil::None;
@@ -510,7 +660,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
mo6->ivsd = IceUtil::None;
mo6->ioopd = IceUtil::None;
- MultiOptionalPtr mo7 = MultiOptionalPtr::dynamicCast(initial->pingPong(mo6));
+ MultiOptionalPtr mo7 = ICE_DYNAMIC_CAST(MultiOptional, initial->pingPong(mo6));
test(!mo7->a);
test(mo7->b == mo1->b);
test(!mo7->c);
@@ -520,7 +670,11 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
test(!mo7->g);
test(mo7->h == mo1->h);
test(!mo7->i);
+#ifdef ICE_CPP11_MAPPING
+ test(targetEquals(mo7->j.value(), mo1->j.value()));
+#else
test(mo7->j == mo1->j);
+#endif
test(!mo7->k);
test(mo7->bs == mo1->bs);
test(!mo7->ss);
@@ -543,7 +697,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
test(!mo7->ioopd);
// Clear the second half of the optional parameters
- MultiOptionalPtr mo8 = new MultiOptional(*mo5);
+ MultiOptionalPtr mo8 = ICE_MAKE_SHARED(MultiOptional, *mo5);
mo8->b = IceUtil::None;
mo8->d = IceUtil::None;
mo8->f = IceUtil::None;
@@ -560,7 +714,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
mo8->ifsd = IceUtil::None;
mo8->iood = IceUtil::None;
- MultiOptionalPtr mo9 = MultiOptionalPtr::dynamicCast(initial->pingPong(mo8));
+ MultiOptionalPtr mo9 = ICE_DYNAMIC_CAST(MultiOptional, initial->pingPong(mo8));
test(mo9->a == mo1->a);
test(!mo9->b);
test(mo9->c == mo1->c);
@@ -584,7 +738,16 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
test(!mo8->fss);
test(mo8->vss == mo1->vss);
test(!mo8->oos);
+
+#ifdef ICE_CPP11_MAPPING
+ test(mo8->oops.value().size() == mo1->oops.value().size());
+ for(size_t i = 0; i< mo8->oops.value().size(); ++i)
+ {
+ test(targetEquals(mo8->oops.value()[i], mo1->oops.value()[i]));
+ }
+#else
test(mo8->oops == mo1->oops);
+#endif
test(mo8->ied == mo1->ied);
test(!mo8->ifsd);
@@ -606,10 +769,10 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(oo1);
out.endEncapsulation();
out.finished(inEncaps);
- test(initial->ice_invoke("pingPong", Ice::Normal, inEncaps, outEncaps));
+ test(initial->ice_invoke("pingPong", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps));
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
- Ice::ObjectPtr obj;
+ Ice::ValuePtr obj;
in.read(obj);
in.endEncapsulation();
test(obj && dynamic_cast<TestObjectReader*>(obj.get()));
@@ -621,10 +784,10 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(mo1);
out.endEncapsulation();
out.finished(inEncaps);
- test(initial->ice_invoke("pingPong", Ice::Normal, inEncaps, outEncaps));
+ test(initial->ice_invoke("pingPong", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps));
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
- Ice::ObjectPtr obj;
+ Ice::ValuePtr obj;
in.read(obj);
in.endEncapsulation();
test(obj && dynamic_cast<TestObjectReader*>(obj.get()));
@@ -634,7 +797,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
//
// Use the 1.0 encoding with operations whose only class parameters are optional.
//
- IceUtil::Optional<OneOptionalPtr> oo(new OneOptional(53));
+ IceUtil::Optional<OneOptionalPtr> oo(ICE_MAKE_SHARED(OneOptional, 53));
initial->sendOptionalClass(true, oo);
initial->ice_encodingVersion(Ice::Encoding_1_0)->sendOptionalClass(true, oo);
@@ -644,23 +807,23 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
test(!oo);
RecursiveSeq recursive1;
- recursive1.push_back(new Recursive());
+ recursive1.push_back(ICE_MAKE_SHARED(Recursive));
RecursiveSeq recursive2;
- recursive2.push_back(new Recursive());
+ recursive2.push_back(ICE_MAKE_SHARED(Recursive));
recursive1[0]->value = recursive2;
- RecursivePtr outer = new Recursive();
+ RecursivePtr outer = ICE_MAKE_SHARED(Recursive);
outer->value = recursive1;
initial->pingPong(outer);
- GPtr g = new G();
- g->gg1Opt = new G1("gg1Opt");
- g->gg2 = new G2(10);
- g->gg2Opt = new G2(20);
- g->gg1 = new G1("gg1");
+ GPtr g = ICE_MAKE_SHARED(G);
+ g->gg1Opt = ICE_MAKE_SHARED(G1, "gg1Opt");
+ g->gg2 = ICE_MAKE_SHARED(G2, 10);
+ g->gg2Opt = ICE_MAKE_SHARED(G2, 20);
+ g->gg1 = ICE_MAKE_SHARED(G1, "gg1");
GPtr r = initial->opG(g);
- test("gg1Opt" == r->gg1Opt.get()->a);
+ test("gg1Opt" == r->gg1Opt.value()->a);
test(10 == r->gg2->a);
- test(20 == r->gg2Opt.get()->a);
+ test(20 == r->gg2Opt.value()->a);
test("gg1" == r->gg1->a);
initial->opVoid();
@@ -672,13 +835,13 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, IceUtil::Optional<string>("test"));
out.endEncapsulation();
out.finished(inEncaps);
- test(initial->ice_invoke("opVoid", Ice::Normal, inEncaps, outEncaps));
+ test(initial->ice_invoke("opVoid", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps));
}
cout << "ok" << endl;
cout << "testing marshalling of large containers with fixed size elements..." << flush;
- MultiOptionalPtr mc = new MultiOptional();
+ MultiOptionalPtr mc = ICE_MAKE_SHARED(MultiOptional);
ByteSeq byteSeq;
byteSeq.resize(1000);
@@ -699,7 +862,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
}
mc->ifsd = ifsd;
- mc = MultiOptionalPtr::dynamicCast(initial->pingPong(mc));
+ mc = ICE_DYNAMIC_CAST(MultiOptional, initial->pingPong(mc));
test(mc->bs->size() == 1000);
test(mc->shs->size() == 300);
test(mc->fss->size() == 300);
@@ -712,10 +875,10 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(mc);
out.endEncapsulation();
out.finished(inEncaps);
- test(initial->ice_invoke("pingPong", Ice::Normal, inEncaps, outEncaps));
+ test(initial->ice_invoke("pingPong", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps));
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
- Ice::ObjectPtr obj;
+ Ice::ValuePtr obj;
in.read(obj);
in.endEncapsulation();
test(obj && dynamic_cast<TestObjectReader*>(obj.get()));
@@ -725,8 +888,8 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
cout << "ok" << endl;
cout << "testing tag marshalling... " << flush;
- BPtr b = new B();
- BPtr b2 = BPtr::dynamicCast(initial->pingPong(b));
+ BPtr b = ICE_MAKE_SHARED(B);
+ BPtr b2 = ICE_DYNAMIC_CAST(B, initial->pingPong(b));
test(!b2->ma);
test(!b2->mb);
test(!b2->mc);
@@ -736,7 +899,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
b->mc = 12;
b->md = 13;
- b2 = BPtr::dynamicCast(initial->pingPong(b));
+ b2 = ICE_DYNAMIC_CAST(B, initial->pingPong(b));
test(b2->ma == 10);
test(b2->mb == 11);
test(b2->mc == 12);
@@ -749,10 +912,10 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(b);
out.endEncapsulation();
out.finished(inEncaps);
- test(initial->ice_invoke("pingPong", Ice::Normal, inEncaps, outEncaps));
+ test(initial->ice_invoke("pingPong", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps));
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
- Ice::ObjectPtr obj;
+ Ice::ValuePtr obj;
in.read(obj);
in.endEncapsulation();
test(obj);
@@ -763,12 +926,12 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
cout << "testing marshalling of objects with optional objects..." << flush;
{
- FPtr f = new F();
+ FPtr f = ICE_MAKE_SHARED(F);
- f->af = new A();
+ f->af = ICE_MAKE_SHARED(A);
f->ae = *f->af;
- FPtr rf = FPtr::dynamicCast(initial->pingPong(f));
+ FPtr rf = ICE_DYNAMIC_CAST(F, initial->pingPong(f));
test(rf->ae == *rf->af);
factory->setEnabled(true);
@@ -779,7 +942,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.finished(inEncaps);
Ice::InputStream in(communicator, out.getEncoding(), inEncaps);
in.startEncapsulation();
- Ice::ObjectPtr obj;
+ Ice::ValuePtr obj;
in.read(obj);
in.endEncapsulation();
factory->setEnabled(false);
@@ -790,12 +953,12 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
cout << "ok" << endl;
cout << "testing optional with default values... " << flush;
- WDPtr wd = WDPtr::dynamicCast(initial->pingPong(new WD()));
+ WDPtr wd = ICE_DYNAMIC_CAST(WD, initial->pingPong(ICE_MAKE_SHARED(WD)));
test(*wd->a == 5);
test(*wd->s == "test");
wd->a = IceUtil::None;
wd->s = IceUtil::None;
- wd = WDPtr::dynamicCast(initial->pingPong(wd));
+ wd = ICE_DYNAMIC_CAST(WD, initial->pingPong(wd));
test(!wd->a);
test(!wd->s);
cout << "ok" << endl;
@@ -804,9 +967,9 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
{
cout << "testing marshalling with unknown class slices... " << flush;
{
- CPtr c = new C();
+ CPtr c = ICE_MAKE_SHARED(C);
c->ss = "test";
- c->ms = "testms";
+ c->ms = string("testms");
{
Ice::OutputStream out(communicator);
@@ -815,10 +978,10 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.endEncapsulation();
out.finished(inEncaps);
factory->setEnabled(true);
- test(initial->ice_invoke("pingPong", Ice::Normal, inEncaps, outEncaps));
+ test(initial->ice_invoke("pingPong", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps));
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
- Ice::ObjectPtr obj;
+ Ice::ValuePtr obj;
in.read(obj);
in.endEncapsulation();
test(dynamic_cast<CObjectReader*>(obj.get()));
@@ -829,14 +992,14 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
factory->setEnabled(true);
Ice::OutputStream out(communicator);
out.startEncapsulation();
- Ice::ObjectPtr d = new DObjectWriter();
+ Ice::ValuePtr d = ICE_MAKE_SHARED(DObjectWriter);
out.write(d);
out.endEncapsulation();
out.finished(inEncaps);
- test(initial->ice_invoke("pingPong", Ice::Normal, inEncaps, outEncaps));
+ test(initial->ice_invoke("pingPong", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps));
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
- Ice::ObjectPtr obj;
+ Ice::ValuePtr obj;
in.read(obj);
in.endEncapsulation();
test(obj && dynamic_cast<DObjectReader*>(obj.get()));
@@ -848,15 +1011,19 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
cout << "testing optionals with unknown classes..." << flush;
{
- APtr a = new A();
+ APtr a = ICE_MAKE_SHARED(A);
Ice::OutputStream out(communicator);
out.startEncapsulation();
out.write(a);
+#ifdef ICE_CPP11_MAPPING
+ out.write(1, Ice::make_optional(make_shared<DObjectWriter>()));
+#else
out.write(1, IceUtil::makeOptional(Ice::ObjectPtr(new DObjectWriter)));
+#endif
out.endEncapsulation();
out.finished(inEncaps);
- test(initial->ice_invoke("opClassAndUnknownOptional", Ice::Normal, inEncaps, outEncaps));
+ test(initial->ice_invoke("opClassAndUnknownOptional", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps));
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
@@ -872,16 +1039,18 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
IceUtil::Optional<Ice::Byte> p2 = initial->opByte(p1, p3);
test(!p2 && !p3);
- p1 = 56;
+ const Ice::Byte bval = 56;
+
+ p1 = bval;
p2 = initial->opByte(p1, p3);
- test(p2 == 56 && p3 == 56);
+ test(p2 == bval && p3 == bval);
Ice::OutputStream out(communicator);
out.startEncapsulation();
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opByte", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opByte", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -891,7 +1060,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
in.read(89, p4);
in.endEncapsulation();
- test(p2 == 56 && p3 == 56 && !p4);
+ test(p2 == bval && p3 == bval && !p4);
Ice::InputStream in2(communicator, out.getEncoding(), outEncaps);
in2.startEncapsulation();
@@ -913,7 +1082,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opBool", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opBool", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -932,22 +1101,24 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
IceUtil::Optional<Ice::Short> p2 = initial->opShort(p1, p3);
test(!p2 && !p3);
- p1 = 56;
+ const Ice::Short sval = 56;
+
+ p1 = sval;
p2 = initial->opShort(p1, p3);
- test(p2 == 56 && p3 == 56);
+ test(p2 == sval && p3 == sval);
Ice::OutputStream out(communicator);
out.startEncapsulation();
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opShort", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opShort", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
in.read(3, p3);
in.endEncapsulation();
- test(p2 == 56 && p3 == 56);
+ test(p2 == sval && p3 == sval);
Ice::InputStream in2(communicator, out.getEncoding(), outEncaps);
in2.startEncapsulation();
@@ -960,7 +1131,9 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
IceUtil::Optional<Ice::Int> p2 = initial->opInt(p1, p3);
test(!p2 && !p3);
- p1 = 56;
+ const Ice::Int ival = 56;
+
+ p1 = ival;
p2 = initial->opInt(p1, p3);
test(p2 == 56 && p3 == 56);
@@ -969,13 +1142,13 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opInt", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opInt", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
in.read(3, p3);
in.endEncapsulation();
- test(p2 == 56 && p3 == 56);
+ test(p2 == ival && p3 == ival);
Ice::InputStream in2(communicator, out.getEncoding(), outEncaps);
in2.startEncapsulation();
@@ -988,22 +1161,24 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
IceUtil::Optional<Ice::Long> p2 = initial->opLong(p1, p3);
test(!p2 && !p3);
- p1 = 56;
+ const Ice::Long lval = 56;
+
+ p1 = lval;
p2 = initial->opLong(p1, p3);
- test(p2 == 56 && p3 == 56);
+ test(p2 == lval && p3 == lval);
Ice::OutputStream out(communicator);
out.startEncapsulation();
out.write(1, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opLong", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opLong", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(2, p3);
in.read(3, p2);
in.endEncapsulation();
- test(p2 == 56 && p3 == 56);
+ test(p2 == lval && p3 == lval);
Ice::InputStream in2(communicator, out.getEncoding(), outEncaps);
in2.startEncapsulation();
@@ -1016,22 +1191,24 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
IceUtil::Optional<Ice::Float> p2 = initial->opFloat(p1, p3);
test(!p2 && !p3);
- p1 = 1.0f;
+ const Ice::Float fval = 1.0f;
+
+ p1 = fval;
p2 = initial->opFloat(p1, p3);
- test(p2 == 1.0f && p3 == 1.0f);
+ test(p2 == fval && p3 == fval);
Ice::OutputStream out(communicator);
out.startEncapsulation();
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opFloat", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opFloat", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
in.read(3, p3);
in.endEncapsulation();
- test(p2 == 1.0f && p3 == 1.0f);
+ test(p2 == fval && p3 == fval);
Ice::InputStream in2(communicator, out.getEncoding(), outEncaps);
in2.startEncapsulation();
@@ -1044,22 +1221,24 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
IceUtil::Optional<Ice::Double> p2 = initial->opDouble(p1, p3);
test(!p2 && !p3);
- p1 = 1.0;
+ const Ice::Double dval = 1.0;
+
+ p1 = dval;
p2 = initial->opDouble(p1, p3);
- test(p2 == 1.0 && p3 == 1.0);
+ test(p2 == dval && p3 == dval);
Ice::OutputStream out(communicator);
out.startEncapsulation();
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opDouble", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opDouble", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
in.read(3, p3);
in.endEncapsulation();
- test(p2 == 1.0 && p3 == 1.0);
+ test(p2 == dval && p3 == dval);
Ice::InputStream in2(communicator, out.getEncoding(), outEncaps);
in2.startEncapsulation();
@@ -1072,22 +1251,24 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
IceUtil::Optional<string> p2 = initial->opString(p1, p3);
test(!p2 && !p3);
- p1 = "test";
- p2 = initial->opString("test", p3);
- test(p2 == "test" && p3 == "test");
+ const string sval = "test";
+
+ p1 = sval;
+ p2 = initial->opString(sval, p3);
+ test(p2 == sval && p3 == sval);
Ice::OutputStream out(communicator);
out.startEncapsulation();
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opString", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opString", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
in.read(3, p3);
in.endEncapsulation();
- test(p2 == "test" && p3 == "test");
+ test(p2 == sval && p3 == sval);
Ice::InputStream in2(communicator, out.getEncoding(), outEncaps);
in2.startEncapsulation();
@@ -1102,22 +1283,24 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
IceUtil::Optional<string> p2 = initial->opCustomString(p1, p3);
test(!p2 && !p3);
- p1 = "test";
- p2 = initial->opString("test", p3);
- test(p2 == "test" && p3 == "test");
+ const string sval = "test";
+
+ p1 = Util::string_view(sval);
+ p2 = initial->opString(sval, p3);
+ test(p2 == sval && p3 == sval);
Ice::OutputStream out(communicator);
out.startEncapsulation();
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opCustomString", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opCustomString", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
in.read(3, p3);
in.endEncapsulation();
- test(p2 == "test" && p3 == "test");
+ test(p2 == sval && p3 == sval);
Ice::InputStream in2(communicator, out.getEncoding(), outEncaps);
in2.startEncapsulation();
@@ -1131,22 +1314,22 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
IceUtil::Optional<Test::MyEnum> p2 = initial->opMyEnum(p1, p3);
test(!p2 && !p3);
- p1 = Test::MyEnumMember;
+ p1 = ICE_ENUM(MyEnum, MyEnumMember);
p2 = initial->opMyEnum(p1, p3);
- test(p2 == Test::MyEnumMember && p3 == Test::MyEnumMember);
+ test(p2 == ICE_ENUM(MyEnum, MyEnumMember) && p3 == ICE_ENUM(MyEnum, MyEnumMember));
Ice::OutputStream out(communicator);
out.startEncapsulation();
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opMyEnum", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opMyEnum", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
in.read(3, p3);
in.endEncapsulation();
- test(p2 == Test::MyEnumMember && p3 == Test::MyEnumMember);
+ test(p2 == ICE_ENUM(MyEnum, MyEnumMember) && p3 == ICE_ENUM(MyEnum, MyEnumMember));
Ice::InputStream in2(communicator, out.getEncoding(), outEncaps);
in2.startEncapsulation();
@@ -1169,7 +1352,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opSmallStruct", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opSmallStruct", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1198,7 +1381,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opFixedStruct", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opFixedStruct", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1227,7 +1410,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opVarStruct", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opVarStruct", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1246,7 +1429,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
IceUtil::Optional<OneOptionalPtr> p2 = initial->opOneOptional(p1, p3);
test(!p2 && !p3);
- p1 = new OneOptional(58);
+ p1 = ICE_MAKE_SHARED(OneOptional, 58);
p2 = initial->opOneOptional(p1, p3);
test((*p2)->a == 58 && (*p3)->a == 58);
@@ -1255,7 +1438,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opOneOptional", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opOneOptional", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1269,27 +1452,37 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
}
{
- IceUtil::Optional<OneOptionalPrx> p1;
- IceUtil::Optional<OneOptionalPrx> p3;
- IceUtil::Optional<OneOptionalPrx> p2 = initial->opOneOptionalProxy(p1, p3);
+ IceUtil::Optional<OneOptionalPrxPtr> p1;
+ IceUtil::Optional<OneOptionalPrxPtr> p3;
+ IceUtil::Optional<OneOptionalPrxPtr> p2 = initial->opOneOptionalProxy(p1, p3);
test(!p2 && !p3);
- p1 = OneOptionalPrx::uncheckedCast(communicator->stringToProxy("test"));
+ p1 = ICE_UNCHECKED_CAST(OneOptionalPrx, communicator->stringToProxy("test"));
p2 = initial->opOneOptionalProxy(p1, p3);
+
+#ifdef ICE_CPP11_MAPPING
+ test(targetEquals(p2.value(), p1.value()) && targetEquals(p3.value(), p1.value()));
+#else
test(p2 == p1 && p3 == p1);
+#endif
Ice::OutputStream out(communicator);
out.startEncapsulation();
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opOneOptionalProxy", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opOneOptionalProxy", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
in.read(3, p3);
in.endEncapsulation();
+
+#ifdef ICE_CPP11_MAPPING
+ test(targetEquals(p2.value(), p1.value()) && targetEquals(p3.value(), p1.value()));
+#else
test(p2 == p1 && p3 == p1);
+#endif
Ice::InputStream in2(communicator, out.getEncoding(), outEncaps);
in2.startEncapsulation();
@@ -1297,15 +1490,20 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
}
{
- FPtr f = new F();
- f->af = new A();
+ FPtr f = ICE_MAKE_SHARED(F);
+ f->af = ICE_MAKE_SHARED(A);
(*f->af)->requiredA = 56;
f->ae = *f->af;
Ice::OutputStream out(communicator);
out.startEncapsulation();
+#ifdef ICE_CPP11_MAPPING
+ out.write(1, make_optional(f));
+ out.write(2, make_optional(f->ae));
+#else
out.write(1, makeOptional(f));
out.write(2, makeOptional(f->ae));
+#endif
out.endEncapsulation();
out.finished(inEncaps);
@@ -1327,12 +1525,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
vector<Ice::Byte> bs(100);
fill(bs.begin(), bs.end(), 56);
-#if defined(__SUNPRO_CC) && defined(_RWSTD_NO_MEMBER_TEMPLATES)
- std::pair<const Ice::Byte*, const Ice::Byte*> cpair(&bs[0], &bs[0] + bs.size());
- p1 = cpair;
-#else
- p1 = make_pair(&bs[0], &bs[0] + bs.size());
-#endif
+ p1 = toArrayRange(bs);
p2 = initial->opByteSeq(p1, p3);
test(p2 && p3);
test(p2 == bs && p3 == bs);
@@ -1342,7 +1535,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opByteSeq", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opByteSeq", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1364,12 +1557,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
bool bs[100];
fill(&bs[0], &bs[0] + 100, true);
vector<bool> bsv(&bs[0], &bs[0] + 100);
-#if defined(__SUNPRO_CC) && defined(_RWSTD_NO_MEMBER_TEMPLATES)
- std::pair<const bool*, const bool*> cpair(&bs[0], &bs[0] + 100);
- p1 = cpair;
-#else
- p1 = make_pair(&bs[0], &bs[0] + 100);
-#endif
+ p1 = toArrayRange(bs, 100);
p2 = initial->opBoolSeq(p1, p3);
test(p2 && p3);
test(p2 == bsv && p3 == bsv);
@@ -1379,7 +1567,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opBoolSeq", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opBoolSeq", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1400,12 +1588,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
vector<Ice::Short> bs(100);
fill(bs.begin(), bs.end(), 56);
-#if defined(__SUNPRO_CC) && defined(_RWSTD_NO_MEMBER_TEMPLATES)
- std::pair<const Ice::Short*, const Ice::Short*> cpair(&bs[0], &bs[0] + bs.size());
- p1 = cpair;
-#else
- p1 = make_pair(&bs[0], &bs[0] + bs.size());
-#endif
+ p1 = toArrayRange(bs);
p2 = initial->opShortSeq(p1, p3);
test(p2 && p3);
test(p2 == bs && p3 == bs);
@@ -1415,7 +1598,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opShortSeq", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opShortSeq", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1436,12 +1619,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
vector<Ice::Int> bs(100);
fill(bs.begin(), bs.end(), 56);
-#if defined(__SUNPRO_CC) && defined(_RWSTD_NO_MEMBER_TEMPLATES)
- std::pair<const Ice::Int*, const Ice::Int*> cpair(&bs[0], &bs[0] + bs.size());
- p1 = cpair;
-#else
- p1 = make_pair(&bs[0], &bs[0] + bs.size());
-#endif
+ p1 = toArrayRange(bs);
p2 = initial->opIntSeq(p1, p3);
test(p2 && p3);
test(p2 == bs && p3 == bs);
@@ -1451,7 +1629,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opIntSeq", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opIntSeq", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1472,12 +1650,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
vector<Ice::Long> bs(100);
fill(bs.begin(), bs.end(), 56);
-#if defined(__SUNPRO_CC) && defined(_RWSTD_NO_MEMBER_TEMPLATES)
- std::pair<const Ice::Long*, const Ice::Long*> cpair(&bs[0], &bs[0] + bs.size());
- p1 = cpair;
-#else
- p1 = make_pair(&bs[0], &bs[0] + bs.size());
-#endif
+ p1 = toArrayRange(bs);
p2 = initial->opLongSeq(p1, p3);
test(p2 && p3);
test(p2 == bs && p3 == bs);
@@ -1487,7 +1660,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opLongSeq", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opLongSeq", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1508,12 +1681,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
vector<Ice::Float> bs(100);
fill(bs.begin(), bs.end(), 1.0f);
-#if defined(__SUNPRO_CC) && defined(_RWSTD_NO_MEMBER_TEMPLATES)
- std::pair<const Ice::Float*, const Ice::Float*> cpair(&bs[0], &bs[0] + bs.size());
- p1 = cpair;
-#else
- p1 = make_pair(&bs[0], &bs[0] + bs.size());
-#endif
+ p1 = toArrayRange(bs);
p2 = initial->opFloatSeq(p1, p3);
test(p2 && p3);
test(p2 == bs && p3 == bs);
@@ -1523,7 +1691,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opFloatSeq", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opFloatSeq", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1544,12 +1712,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
vector<Ice::Double> bs(100);
fill(bs.begin(), bs.end(), 1.0);
-#if defined(__SUNPRO_CC) && defined(_RWSTD_NO_MEMBER_TEMPLATES)
- std::pair<const Ice::Double*, const Ice::Double*> cpair(&bs[0], &bs[0] + bs.size());
- p1 = cpair;
-#else
- p1 = make_pair(&bs[0], &bs[0] + bs.size());
-#endif
+ p1 = toArrayRange(bs);
p2 = initial->opDoubleSeq(p1, p3);
test(p2 && p3);
test(p2 == bs && p3 == bs);
@@ -1559,7 +1722,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opDoubleSeq", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opDoubleSeq", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1572,6 +1735,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
in2.endEncapsulation();
}
+#ifndef ICE_CPP11_MAPPING
{
IceUtil::Optional<std::pair<StringSeq::const_iterator, StringSeq::const_iterator> > p1;
IceUtil::Optional<StringSeq> p3;
@@ -1595,7 +1759,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opStringSeq", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opStringSeq", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1607,6 +1771,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
in2.startEncapsulation();
in2.endEncapsulation();
}
+#endif
{
IceUtil::Optional<std::pair<const FixedStruct*, const FixedStruct*> > p1;
@@ -1617,7 +1782,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
std::pair<const FixedStruct*, const FixedStruct*> p;
p.first = p.second = 0;
p2 = initial->opFixedStructSeq(p, p3);
- test(p2 && p3 && p2.get().empty() && p3.get().empty());
+ test(p2 && p3 && p2.value().empty() && p3.value().empty());
FixedStruct fss[10];
fss[0].m = 1;
@@ -1631,12 +1796,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
fss[8].m = 9;
fss[9].m = 10;
vector<FixedStruct> fssv(&fss[0], &fss[0] + 10);
-#if defined(__SUNPRO_CC) && defined(_RWSTD_NO_MEMBER_TEMPLATES)
- std::pair<const FixedStruct*, const FixedStruct*> cpair(&fss[0], &fss[0] + 10);
- p1 = cpair;
-#else
- p1 = make_pair(&fss[0], &fss[0] + 10);
-#endif
+ p1 = toArrayRange(fss, 10);
p2 = initial->opFixedStructSeq(p1, p3);
test(p2 && p3);
test(p2 == fssv && p3 == fssv);
@@ -1646,7 +1806,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opFixedStructSeq", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opFixedStructSeq", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1659,6 +1819,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
in2.endEncapsulation();
}
+#ifndef ICE_CPP11_MAPPING
{
IceUtil::Optional<std::pair<VarStructSeq::const_iterator, VarStructSeq::const_iterator> > p1;
IceUtil::Optional<VarStructSeq> p3;
@@ -1681,7 +1842,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opVarStructSeq", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opVarStructSeq", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1693,6 +1854,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
in2.startEncapsulation();
in2.endEncapsulation();
}
+#endif
cout << "ok" << endl;
cout << "testing optional parameters and dictionaries... " << flush;
@@ -1714,7 +1876,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opIntIntDict", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opIntIntDict", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1745,7 +1907,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opStringIntDict", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opStringIntDict", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1765,7 +1927,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
test(!p2 && !p3);
IntOneOptionalDict ss;
- ss.insert(make_pair<int, OneOptionalPtr>(1, new OneOptional(58)));
+ ss.insert(make_pair<int, OneOptionalPtr>(1, ICE_MAKE_SHARED(OneOptional, 58)));
p1 = ss;
p2 = initial->opIntOneOptionalDict(p1, p3);
test(p2 && p3);
@@ -1776,7 +1938,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opIntOneOptionalDict", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opIntOneOptionalDict", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1811,7 +1973,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
out.write(2, p1);
out.endEncapsulation();
out.finished(inEncaps);
- initial->ice_invoke("opCustomIntStringDict", Ice::Normal, inEncaps, outEncaps);
+ initial->ice_invoke("opCustomIntStringDict", Ice::ICE_ENUM(OperationMode, Normal), inEncaps, outEncaps);
Ice::InputStream in(communicator, out.getEncoding(), outEncaps);
in.startEncapsulation();
in.read(1, p2);
@@ -1846,13 +2008,13 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
try
{
- initial->opOptionalException(30, "test", new OneOptional(53));
+ initial->opOptionalException(30, string("test"), ICE_MAKE_SHARED(OneOptional, 53));
test(false);
}
catch(const OptionalException& ex)
{
test(ex.a == 30);
- test(ex.b == "test");
+ test(ex.b == string("test"));
test((*ex.o)->a = 53);
}
@@ -1862,7 +2024,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
// Use the 1.0 encoding with an exception whose only class members are optional.
//
initial->ice_encodingVersion(Ice::Encoding_1_0)->
- opOptionalException(30, "test", new OneOptional(53));
+ opOptionalException(30, string("test"), ICE_MAKE_SHARED(OneOptional, 53));
test(false);
}
catch(const OptionalException& ex)
@@ -1896,17 +2058,17 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
try
{
IceUtil::Optional<Ice::Int> a = 30;
- IceUtil::Optional<string> b = "test2";
- IceUtil::Optional<OneOptionalPtr> o = new OneOptional(53);
+ IceUtil::Optional<string> b = string("test2");
+ IceUtil::Optional<OneOptionalPtr> o = ICE_MAKE_SHARED(OneOptional, 53);
initial->opDerivedException(a, b, o);
test(false);
}
catch(const DerivedException& ex)
{
test(ex.a == 30);
- test(ex.b == "test2");
+ test(ex.b == string("test2"));
test((*ex.o)->a == 53);
- test(ex.ss == "test2");
+ test(ex.ss == string("test2"));
test((*ex.o2)->a == 53);
}
catch(const OptionalException&)
@@ -1927,7 +2089,7 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
test(!ex.a);
test(!ex.b);
test(!ex.o);
- test(ex.ss == "test");
+ test(ex.ss == string("test"));
test(!ex.o2);
}
catch(const OptionalException&)
@@ -1938,17 +2100,17 @@ allTests(const Ice::CommunicatorPtr& communicator, bool)
try
{
IceUtil::Optional<Ice::Int> a = 30;
- IceUtil::Optional<string> b = "test2";
- IceUtil::Optional<OneOptionalPtr> o = new OneOptional(53);
+ IceUtil::Optional<string> b = string("test2");
+ IceUtil::Optional<OneOptionalPtr> o = ICE_MAKE_SHARED(OneOptional, 53);
initial->opRequiredException(a, b, o);
test(false);
}
catch(const RequiredException& ex)
{
test(ex.a == 30);
- test(ex.b == "test2");
+ test(ex.b == string("test2"));
test((*ex.o)->a == 53);
- test(ex.ss == "test2");
+ test(ex.ss == string("test2"));
test(ex.o2->a == 53);
}
catch(const OptionalException&)
diff --git a/cpp/test/Ice/optional/Client.cpp b/cpp/test/Ice/optional/Client.cpp
index d8a550ffd13..4983ad69a88 100644
--- a/cpp/test/Ice/optional/Client.cpp
+++ b/cpp/test/Ice/optional/Client.cpp
@@ -19,8 +19,8 @@ using namespace Test;
int
run(int, char**, const Ice::CommunicatorPtr& communicator)
{
- InitialPrx allTests(const Ice::CommunicatorPtr&, bool);
- InitialPrx initial = allTests(communicator, false);
+ InitialPrxPtr allTests(const Ice::CommunicatorPtr&, bool);
+ InitialPrxPtr initial = allTests(communicator, false);
initial->shutdown();
return EXIT_SUCCESS;
}
diff --git a/cpp/test/Ice/optional/Server.cpp b/cpp/test/Ice/optional/Server.cpp
index dad0a56fd58..fe22e6abe87 100644
--- a/cpp/test/Ice/optional/Server.cpp
+++ b/cpp/test/Ice/optional/Server.cpp
@@ -21,7 +21,7 @@ run(int, char**, const Ice::CommunicatorPtr& communicator)
{
communicator->getProperties()->setProperty("TestAdapter.Endpoints", getTestEndpoint(communicator, 0));
Ice::ObjectAdapterPtr adapter = communicator->createObjectAdapter("TestAdapter");
- adapter->add(new InitialI(), communicator->stringToIdentity("initial"));
+ adapter->add(ICE_MAKE_SHARED(InitialI), communicator->stringToIdentity("initial"));
adapter->activate();
TEST_READY
communicator->waitForShutdown();
diff --git a/cpp/test/Ice/optional/ServerAMD.cpp b/cpp/test/Ice/optional/ServerAMD.cpp
index 47976af6280..9b4c93e894b 100644
--- a/cpp/test/Ice/optional/ServerAMD.cpp
+++ b/cpp/test/Ice/optional/ServerAMD.cpp
@@ -20,7 +20,7 @@ run(int, char**, const Ice::CommunicatorPtr& communicator)
{
communicator->getProperties()->setProperty("TestAdapter.Endpoints", getTestEndpoint(communicator, 0));
Ice::ObjectAdapterPtr adapter = communicator->createObjectAdapter("TestAdapter");
- adapter->add(new InitialI(), communicator->stringToIdentity("initial"));
+ adapter->add(ICE_MAKE_SHARED(InitialI), communicator->stringToIdentity("initial"));
adapter->activate();
TEST_READY
communicator->waitForShutdown();
diff --git a/cpp/test/Ice/optional/StringView.h b/cpp/test/Ice/optional/StringView.h
index 8dd1d7d6f73..43e5bf74bb7 100644
--- a/cpp/test/Ice/optional/StringView.h
+++ b/cpp/test/Ice/optional/StringView.h
@@ -153,11 +153,13 @@ struct StreamHelper<Util::string_view, StreamHelperCategoryBuiltin>
template<class S> static inline void
write(S* stream, const Util::string_view& v)
{
-
-#ifdef STRING_VIEW_IGNORE_STRING_CONVERTER
- stream->write(v.data(), v.size(), false);
+#ifdef ICE_CPP11_MAPPING
+ stream->write(v.data(), v.size());
#else
- stream->write(v.data(), v.size(), true);
+ //
+ // In C++98, for consistency with the read, we don't string-convert
+ //
+ stream->write(v.data(), v.size(), false);
#endif
}
@@ -167,19 +169,10 @@ struct StreamHelper<Util::string_view, StreamHelperCategoryBuiltin>
const char* vdata = 0;
size_t vsize = 0;
-#ifdef STRING_VIEW_IGNORE_STRING_CONVERTER
+ //
+ // In C++98, we ignore the string converter
+ //
stream->read(vdata, vsize);
-#else
- std::string holder;
- stream->read(vdata, vsize, holder);
-
- // If holder is not empty, a string conversion occured, and we can't return a
- // string_view since it does not hold the memory
- if(!holder.empty())
- {
- throw Ice::MarshalException(__FILE__, __LINE__, "string conversion not supported");
- }
-#endif
if(vsize > 0)
{
diff --git a/cpp/test/Ice/optional/TestAMDI.cpp b/cpp/test/Ice/optional/TestAMDI.cpp
index 1dd8489d5c4..9e277a1ad7e 100644
--- a/cpp/test/Ice/optional/TestAMDI.cpp
+++ b/cpp/test/Ice/optional/TestAMDI.cpp
@@ -19,6 +19,397 @@ InitialI::InitialI()
{
}
+#ifdef ICE_CPP11_MAPPING
+
+void
+InitialI::shutdownAsync(::std::function<void()> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current& current)
+{
+ current.adapter->getCommunicator()->shutdown();
+ response();
+}
+
+void
+InitialI::pingPongAsync(::std::shared_ptr<::Ice::Value> obj,
+ ::std::function<void(const ::std::shared_ptr<::Ice::Value>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(obj);
+}
+
+void
+InitialI::opOptionalExceptionAsync(Ice::optional<int> a, Ice::optional<::std::string> b, Ice::optional<::std::shared_ptr<::Test::OneOptional>> o,
+ ::std::function<void()>,
+ ::std::function<void(::std::exception_ptr)> ex, const Ice::Current&)
+{
+ ex(make_exception_ptr(OptionalException(false, a, b, o)));
+}
+
+void
+InitialI::opDerivedExceptionAsync(Ice::optional<int> a, Ice::optional<::std::string> b, Ice::optional<::std::shared_ptr<::Test::OneOptional>> o,
+ ::std::function<void()>,
+ ::std::function<void(::std::exception_ptr)> ex, const Ice::Current&)
+{
+ ex(make_exception_ptr(DerivedException(false, a, b, o, b, o)));
+}
+
+
+void
+InitialI::opRequiredExceptionAsync(Ice::optional<int> a, Ice::optional<::std::string> b, Ice::optional<::std::shared_ptr<::Test::OneOptional>> o,
+ ::std::function<void()>,
+ ::std::function<void(::std::exception_ptr)> ex, const Ice::Current&)
+{
+ RequiredException e;
+ e.a = a;
+ e.b = b;
+ e.o = o;
+ if(b)
+ {
+ e.ss = b.value();
+ }
+ if(o)
+ {
+ e.o2 = o.value();
+ }
+
+ ex(make_exception_ptr(e));
+}
+
+void
+InitialI::opByteAsync(Ice::optional<::Ice::Byte> p1,
+ ::std::function<void(const Ice::optional<::Ice::Byte>&, const Ice::optional<::Ice::Byte>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opBoolAsync(Ice::optional<bool> p1,
+ ::std::function<void(const Ice::optional<bool>&, const Ice::optional<bool>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opShortAsync(Ice::optional<short> p1,
+ ::std::function<void(const Ice::optional<short>&, const Ice::optional<short>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opIntAsync(Ice::optional<int> p1,
+ ::std::function<void(const Ice::optional<int>&, const Ice::optional<int>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opLongAsync(Ice::optional<long long int> p1,
+ ::std::function<void(const Ice::optional<long long int>&, const Ice::optional<long long int>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opFloatAsync(Ice::optional<float> p1,
+ ::std::function<void(const Ice::optional<float>&, const Ice::optional<float>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opDoubleAsync(Ice::optional<double> p1,
+ ::std::function<void(const Ice::optional<double>&, const Ice::optional<double>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opStringAsync(Ice::optional<::std::string> p1,
+ ::std::function<void(const Ice::optional<::std::string>&, const Ice::optional<::std::string>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opCustomStringAsync(Ice::optional<Util::string_view> p1,
+ ::std::function<void(const Ice::optional<Util::string_view>&, const Ice::optional<Util::string_view>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opMyEnumAsync(Ice::optional<::Test::MyEnum> p1,
+ ::std::function<void(const Ice::optional<::Test::MyEnum>&, const Ice::optional<::Test::MyEnum>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opSmallStructAsync(Ice::optional<::Test::SmallStruct> p1,
+ ::std::function<void(const Ice::optional<::Test::SmallStruct>&, const Ice::optional<::Test::SmallStruct>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opFixedStructAsync(Ice::optional<::Test::FixedStruct> p1,
+ ::std::function<void(const Ice::optional<::Test::FixedStruct>&, const Ice::optional<::Test::FixedStruct>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opVarStructAsync(Ice::optional<::Test::VarStruct> p1,
+ ::std::function<void(const Ice::optional<::Test::VarStruct>&, const Ice::optional<::Test::VarStruct>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opOneOptionalAsync(Ice::optional<::std::shared_ptr<::Test::OneOptional>> p1,
+ ::std::function<void(const Ice::optional<::std::shared_ptr<::Test::OneOptional>>&, const Ice::optional<::std::shared_ptr<::Test::OneOptional>>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opOneOptionalProxyAsync(Ice::optional<::std::shared_ptr<::Ice::ObjectPrx>> p1,
+ ::std::function<void(const Ice::optional<::std::shared_ptr<::Ice::ObjectPrx>>&, const Ice::optional<::std::shared_ptr<::Ice::ObjectPrx>>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opByteSeqAsync(Ice::optional<::std::pair<const ::Ice::Byte*, const ::Ice::Byte*>> p1,
+ ::std::function<void(const Ice::optional<::std::pair<const ::Ice::Byte*, const ::Ice::Byte*>>&, const Ice::optional<::std::pair<const ::Ice::Byte*, const ::Ice::Byte*>>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opBoolSeqAsync(Ice::optional<::std::pair<const bool*, const bool*>> p1,
+ ::std::function<void(const Ice::optional<::std::pair<const bool*, const bool*>>&, const Ice::optional<::std::pair<const bool*, const bool*>>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opShortSeqAsync(Ice::optional<::std::pair<const short*, const short*>> p1,
+ ::std::function<void(const Ice::optional<::std::pair<const short*, const short*>>&, const Ice::optional<::std::pair<const short*, const short*>>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opIntSeqAsync(Ice::optional<::std::pair<const int*, const int*>> p1,
+ ::std::function<void(const Ice::optional<::std::pair<const int*, const int*>>&, const Ice::optional<::std::pair<const int*, const int*>>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opLongSeqAsync(Ice::optional<::std::pair<const long long int*, const long long int*>> p1,
+ ::std::function<void(const Ice::optional<::std::pair<const long long int*, const long long int*>>&, const Ice::optional<::std::pair<const long long int*, const long long int*>>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opFloatSeqAsync(Ice::optional<::std::pair<const float*, const float*>> p1,
+ ::std::function<void(const Ice::optional<::std::pair<const float*, const float*>>&, const Ice::optional<::std::pair<const float*, const float*>>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opDoubleSeqAsync(Ice::optional<::std::pair<const double*, const double*>> p1,
+ ::std::function<void(const Ice::optional<::std::pair<const double*, const double*>>&, const Ice::optional<::std::pair<const double*, const double*>>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opStringSeqAsync(Ice::optional<::Test::StringSeq> p1,
+ ::std::function<void(const Ice::optional<::Test::StringSeq>&, const Ice::optional<::Test::StringSeq>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opSmallStructSeqAsync(Ice::optional<::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*>> p1,
+ ::std::function<void(const Ice::optional<::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*>>&, const Ice::optional<::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*>>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opSmallStructListAsync(Ice::optional<::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*>> p1,
+ ::std::function<void(const Ice::optional<::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*>>&, const Ice::optional<::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*>>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opFixedStructSeqAsync(Ice::optional<::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*>> p1,
+ ::std::function<void(const Ice::optional<::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*>>&, const Ice::optional<::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*>>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opFixedStructListAsync(Ice::optional<::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*>> p1,
+ ::std::function<void(const Ice::optional<::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*>>&, const Ice::optional<::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*>>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opVarStructSeqAsync(Ice::optional<::Test::VarStructSeq> p1,
+ ::std::function<void(const Ice::optional<::Test::VarStructSeq>&, const Ice::optional<::Test::VarStructSeq>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opSerializableAsync(Ice::optional<::Test::Serializable> p1,
+ ::std::function<void(const Ice::optional<::Test::Serializable>&, const Ice::optional<::Test::Serializable>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opIntIntDictAsync(Ice::optional<::Test::IntIntDict> p1,
+ ::std::function<void(const Ice::optional<::Test::IntIntDict>&, const Ice::optional<::Test::IntIntDict>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+
+void
+InitialI::opStringIntDictAsync(Ice::optional<::Test::StringIntDict> p1,
+ ::std::function<void(const Ice::optional<::Test::StringIntDict>&, const Ice::optional<::Test::StringIntDict>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opIntOneOptionalDictAsync(Ice::optional<::Test::IntOneOptionalDict> p1,
+ ::std::function<void(const Ice::optional<::Test::IntOneOptionalDict>&, const Ice::optional<::Test::IntOneOptionalDict>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opCustomIntStringDictAsync(Ice::optional<::std::map< int, ::Util::string_view>> p1,
+ ::std::function<void(const Ice::optional<::std::map< int, ::Util::string_view>>&, const Ice::optional<::std::map< int, ::Util::string_view>>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(p1, p1);
+}
+
+void
+InitialI::opClassAndUnknownOptionalAsync(::std::shared_ptr<::Test::A>,
+ ::std::function<void()> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response();
+}
+
+void
+InitialI::sendOptionalClassAsync(bool, Ice::optional<::std::shared_ptr<::Test::OneOptional>>,
+ ::std::function<void()> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response();
+}
+
+void
+InitialI::returnOptionalClassAsync(bool,
+ ::std::function<void(const Ice::optional<::std::shared_ptr<::Test::OneOptional>>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(make_shared<OneOptional>(53));
+}
+
+void
+InitialI::opGAsync(::std::shared_ptr<::Test::G> g,
+ ::std::function<void(const ::std::shared_ptr<::Test::G>&)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(g);
+}
+
+void
+InitialI::opVoidAsync(::std::function<void()> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response();
+}
+
+void
+InitialI::supportsRequiredParamsAsync(::std::function<void(bool)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(false);
+}
+
+void
+InitialI::supportsJavaSerializableAsync(::std::function<void(bool)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(true);
+}
+
+void
+InitialI::supportsCsharpSerializableAsync(::std::function<void(bool)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(true);
+}
+
+void
+InitialI::supportsCppStringViewAsync(::std::function<void(bool)> response,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&)
+{
+ response(true);
+}
+
+
+#else // C++98 mapping
+
void
InitialI::shutdown_async(const ::Test::AMD_Initial_shutdownPtr& cb,
const Ice::Current& current)
@@ -426,3 +817,5 @@ InitialI::supportsCppStringView_async(const ::Test::AMD_Initial_supportsCppStrin
{
cb->ice_response(true);
}
+
+#endif
diff --git a/cpp/test/Ice/optional/TestAMDI.h b/cpp/test/Ice/optional/TestAMDI.h
index b689f280a6e..cc0ae8bf9a1 100644
--- a/cpp/test/Ice/optional/TestAMDI.h
+++ b/cpp/test/Ice/optional/TestAMDI.h
@@ -13,12 +13,211 @@
#include <TestAMD.h>
-class InitialI : public Test::Initial
+class InitialI :
+#ifdef ICE_CPP11_MAPPING
+ public Test::InitialDisp
+#else
+ public Test::Initial
+#endif
{
public:
InitialI();
+#ifdef ICE_CPP11_MAPPING
+
+ virtual void shutdownAsync(::std::function<void()>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void pingPongAsync(::std::shared_ptr<::Ice::Value>,
+ ::std::function<void(const ::std::shared_ptr<::Ice::Value>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opOptionalExceptionAsync(Ice::optional<int>, Ice::optional<::std::string>, Ice::optional<::std::shared_ptr<::Test::OneOptional>>,
+ ::std::function<void()>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opDerivedExceptionAsync(Ice::optional<int>, Ice::optional<::std::string>, Ice::optional<::std::shared_ptr<::Test::OneOptional>>,
+ ::std::function<void()>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+
+ virtual void opRequiredExceptionAsync(Ice::optional<int>, Ice::optional<::std::string>, Ice::optional<::std::shared_ptr<::Test::OneOptional>>,
+ ::std::function<void()>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opByteAsync(Ice::optional<::Ice::Byte>,
+ ::std::function<void(const Ice::optional<::Ice::Byte>&, const Ice::optional<::Ice::Byte>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+
+ virtual void opBoolAsync(Ice::optional<bool>,
+ ::std::function<void(const Ice::optional<bool>&, const Ice::optional<bool>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+
+ virtual void opShortAsync(Ice::optional<short>,
+ ::std::function<void(const Ice::optional<short>&, const Ice::optional<short>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+
+ virtual void opIntAsync(Ice::optional<int>,
+ ::std::function<void(const Ice::optional<int>&, const Ice::optional<int>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opLongAsync(Ice::optional<long long int>,
+ ::std::function<void(const Ice::optional<long long int>&, const Ice::optional<long long int>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opFloatAsync(Ice::optional<float>,
+ ::std::function<void(const Ice::optional<float>&, const Ice::optional<float>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opDoubleAsync(Ice::optional<double>,
+ ::std::function<void(const Ice::optional<double>&, const Ice::optional<double>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opStringAsync(Ice::optional<::std::string>,
+ ::std::function<void(const Ice::optional<::std::string>&, const Ice::optional<::std::string>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opCustomStringAsync(Ice::optional<Util::string_view>,
+ ::std::function<void(const Ice::optional<Util::string_view>&, const Ice::optional<Util::string_view>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opMyEnumAsync(Ice::optional<::Test::MyEnum>,
+ ::std::function<void(const Ice::optional<::Test::MyEnum>&, const Ice::optional<::Test::MyEnum>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opSmallStructAsync(Ice::optional<::Test::SmallStruct>,
+ ::std::function<void(const Ice::optional<::Test::SmallStruct>&, const Ice::optional<::Test::SmallStruct>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opFixedStructAsync(Ice::optional<::Test::FixedStruct>,
+ ::std::function<void(const Ice::optional<::Test::FixedStruct>&, const Ice::optional<::Test::FixedStruct>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opVarStructAsync(Ice::optional<::Test::VarStruct>,
+ ::std::function<void(const Ice::optional<::Test::VarStruct>&, const Ice::optional<::Test::VarStruct>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opOneOptionalAsync(Ice::optional<::std::shared_ptr<::Test::OneOptional>>,
+ ::std::function<void(const Ice::optional<::std::shared_ptr<::Test::OneOptional>>&, const Ice::optional<::std::shared_ptr<::Test::OneOptional>>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opOneOptionalProxyAsync(Ice::optional<::std::shared_ptr<::Ice::ObjectPrx>>,
+ ::std::function<void(const Ice::optional<::std::shared_ptr<::Ice::ObjectPrx>>&, const Ice::optional<::std::shared_ptr<::Ice::ObjectPrx>>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opByteSeqAsync(Ice::optional<::std::pair<const ::Ice::Byte*, const ::Ice::Byte*>>,
+ ::std::function<void(const Ice::optional<::std::pair<const ::Ice::Byte*, const ::Ice::Byte*>>&, const Ice::optional<::std::pair<const ::Ice::Byte*, const ::Ice::Byte*>>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opBoolSeqAsync(Ice::optional<::std::pair<const bool*, const bool*>>,
+ ::std::function<void(const Ice::optional<::std::pair<const bool*, const bool*>>&, const Ice::optional<::std::pair<const bool*, const bool*>>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opShortSeqAsync(Ice::optional<::std::pair<const short*, const short*>>,
+ ::std::function<void(const Ice::optional<::std::pair<const short*, const short*>>&, const Ice::optional<::std::pair<const short*, const short*>>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opIntSeqAsync(Ice::optional<::std::pair<const int*, const int*>>,
+ ::std::function<void(const Ice::optional<::std::pair<const int*, const int*>>&, const Ice::optional<::std::pair<const int*, const int*>>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opLongSeqAsync(Ice::optional<::std::pair<const long long int*, const long long int*>>,
+ ::std::function<void(const Ice::optional<::std::pair<const long long int*, const long long int*>>&, const Ice::optional<::std::pair<const long long int*, const long long int*>>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opFloatSeqAsync(Ice::optional<::std::pair<const float*, const float*>>,
+ ::std::function<void(const Ice::optional<::std::pair<const float*, const float*>>&, const Ice::optional<::std::pair<const float*, const float*>>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opDoubleSeqAsync(Ice::optional<::std::pair<const double*, const double*>>,
+ ::std::function<void(const Ice::optional<::std::pair<const double*, const double*>>&, const Ice::optional<::std::pair<const double*, const double*>>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opStringSeqAsync(Ice::optional<::Test::StringSeq>,
+ ::std::function<void(const Ice::optional<::Test::StringSeq>&, const Ice::optional<::Test::StringSeq>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opSmallStructSeqAsync(Ice::optional<::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*>>,
+ ::std::function<void(const Ice::optional<::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*>>&, const Ice::optional<::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*>>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opSmallStructListAsync(Ice::optional<::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*>>,
+ ::std::function<void(const Ice::optional<::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*>>&, const Ice::optional<::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*>>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opFixedStructSeqAsync(Ice::optional<::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*>>,
+ ::std::function<void(const Ice::optional<::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*>>&, const Ice::optional<::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*>>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+
+ virtual void opFixedStructListAsync(Ice::optional<::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*>>,
+ ::std::function<void(const Ice::optional<::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*>>&, const Ice::optional<::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*>>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opVarStructSeqAsync(Ice::optional<::Test::VarStructSeq>,
+ ::std::function<void(const Ice::optional<::Test::VarStructSeq>&, const Ice::optional<::Test::VarStructSeq>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opSerializableAsync(Ice::optional<::Test::Serializable>,
+ ::std::function<void(const Ice::optional<::Test::Serializable>&, const Ice::optional<::Test::Serializable>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opIntIntDictAsync(Ice::optional<::Test::IntIntDict>,
+ ::std::function<void(const Ice::optional<::Test::IntIntDict>&, const Ice::optional<::Test::IntIntDict>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+
+ virtual void opStringIntDictAsync(Ice::optional<::Test::StringIntDict>,
+ ::std::function<void(const Ice::optional<::Test::StringIntDict>&, const Ice::optional<::Test::StringIntDict>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opIntOneOptionalDictAsync(Ice::optional<::Test::IntOneOptionalDict>,
+ ::std::function<void(const Ice::optional<::Test::IntOneOptionalDict>&, const Ice::optional<::Test::IntOneOptionalDict>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opCustomIntStringDictAsync(Ice::optional<::std::map< int, ::Util::string_view>>,
+ ::std::function<void(const Ice::optional<::std::map< int, ::Util::string_view>>&, const Ice::optional<::std::map< int, ::Util::string_view>>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opClassAndUnknownOptionalAsync(::std::shared_ptr<::Test::A>,
+ ::std::function<void()>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void sendOptionalClassAsync(bool, Ice::optional<::std::shared_ptr<::Test::OneOptional>>,
+ ::std::function<void()>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void returnOptionalClassAsync(bool,
+ ::std::function<void(const Ice::optional<::std::shared_ptr<::Test::OneOptional>>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opGAsync(::std::shared_ptr<::Test::G>,
+ ::std::function<void(const ::std::shared_ptr<::Test::G>&)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void opVoidAsync(::std::function<void()>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void supportsRequiredParamsAsync(::std::function<void(bool)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void supportsJavaSerializableAsync(::std::function<void(bool)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void supportsCsharpSerializableAsync(::std::function<void(bool)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+ virtual void supportsCppStringViewAsync(::std::function<void(bool)>,
+ ::std::function<void(::std::exception_ptr)>, const Ice::Current&) override;
+
+
+
+#else // C++98 mapping
+
virtual void shutdown_async(const ::Test::AMD_Initial_shutdownPtr&,
const Ice::Current&);
@@ -213,6 +412,9 @@ public:
virtual void supportsCppStringView_async(const ::Test::AMD_Initial_supportsCppStringViewPtr&,
const Ice::Current&);
+
+#endif
+
};
#endif
diff --git a/cpp/test/Ice/optional/TestI.cpp b/cpp/test/Ice/optional/TestI.cpp
index 35207c1dac3..9c68843bdfe 100644
--- a/cpp/test/Ice/optional/TestI.cpp
+++ b/cpp/test/Ice/optional/TestI.cpp
@@ -25,16 +25,16 @@ InitialI::shutdown(const Current& current)
current.adapter->getCommunicator()->shutdown();
}
-ObjectPtr
-InitialI::pingPong(const ObjectPtr& obj, const Current&)
+ValuePtr
+InitialI::pingPong(ICE_IN(ValuePtr) obj, const Current&)
{
return obj;
}
void
-InitialI::opOptionalException(const Optional<Int>& a,
- const Optional<string>& b,
- const Optional<OneOptionalPtr>& o,
+InitialI::opOptionalException(ICE_IN(Optional<Int>) a,
+ ICE_IN(Optional<string>) b,
+ ICE_IN(Optional<OneOptionalPtr>) o,
const Ice::Current&)
{
OptionalException ex;
@@ -45,9 +45,9 @@ InitialI::opOptionalException(const Optional<Int>& a,
}
void
-InitialI::opDerivedException(const Optional<Int>& a,
- const Optional<string>& b,
- const Optional<OneOptionalPtr>& o,
+InitialI::opDerivedException(ICE_IN(Optional<Int>) a,
+ ICE_IN(Optional<string>) b,
+ ICE_IN(Optional<OneOptionalPtr>) o,
const Ice::Current&)
{
DerivedException ex;
@@ -60,9 +60,9 @@ InitialI::opDerivedException(const Optional<Int>& a,
}
void
-InitialI::opRequiredException(const Optional<Int>& a,
- const Optional<string>& b,
- const Optional<OneOptionalPtr>& o,
+InitialI::opRequiredException(ICE_IN(Optional<Int>) a,
+ ICE_IN(Optional<string>) b,
+ ICE_IN(Optional<OneOptionalPtr>) o,
const Ice::Current&)
{
RequiredException ex;
@@ -71,73 +71,73 @@ InitialI::opRequiredException(const Optional<Int>& a,
ex.o = o;
if(b)
{
- ex.ss = b.get();
+ ex.ss = b.value();
}
if(o)
{
- ex.o2 = o.get();
+ ex.o2 = o.value();
}
throw ex;
}
Optional<Ice::Byte>
-InitialI::opByte(const Optional<Ice::Byte>& p1, Optional<Ice::Byte>& p3, const Current&)
+InitialI::opByte(ICE_IN(Optional<Ice::Byte>) p1, Optional<Ice::Byte>& p3, const Current&)
{
p3 = p1;
return p1;
}
Optional<bool>
-InitialI::opBool(const Optional<bool>& p1, Optional<bool>& p3, const Current&)
+InitialI::opBool(ICE_IN(Optional<bool>) p1, Optional<bool>& p3, const Current&)
{
p3 = p1;
return p1;
}
Optional<Short>
-InitialI::opShort(const Optional<Short>& p1, Optional<Short>& p3, const Current&)
+InitialI::opShort(ICE_IN(Optional<Short>) p1, Optional<Short>& p3, const Current&)
{
p3 = p1;
return p1;
}
Optional<Int>
-InitialI::opInt(const Optional<Int>& p1, Optional<Int>& p3, const Current&)
+InitialI::opInt(ICE_IN(Optional<Int>) p1, Optional<Int>& p3, const Current&)
{
p3 = p1;
return p1;
}
Optional<Long>
-InitialI::opLong(const Optional<Long>& p1, Optional<Long>& p3, const Current&)
+InitialI::opLong(ICE_IN(Optional<Long>) p1, Optional<Long>& p3, const Current&)
{
p3 = p1;
return p1;
}
Optional<Float>
-InitialI::opFloat(const Optional<Float>& p1, Optional<Float>& p3, const Current&)
+InitialI::opFloat(ICE_IN(Optional<Float>) p1, Optional<Float>& p3, const Current&)
{
p3 = p1;
return p1;
}
Optional<Double>
-InitialI::opDouble(const Optional<Double>& p1, Optional<Double>& p3, const Current&)
+InitialI::opDouble(ICE_IN(Optional<Double>) p1, Optional<Double>& p3, const Current&)
{
p3 = p1;
return p1;
}
Optional<string>
-InitialI::opString(const Optional<string>& p1, Optional<string>& p3, const Current&)
+InitialI::opString(ICE_IN(Optional<string>) p1, Optional<string>& p3, const Current&)
{
p3 = p1;
return p1;
}
Optional<string>
-InitialI::opCustomString(const Optional<Util::string_view>& p1, Optional<string>& p3, const Current&)
+InitialI::opCustomString(ICE_IN(Optional<Util::string_view>) p1, Optional<string>& p3, const Current&)
{
if(p1)
{
@@ -148,49 +148,49 @@ InitialI::opCustomString(const Optional<Util::string_view>& p1, Optional<string>
Optional<MyEnum>
-InitialI::opMyEnum(const Optional<MyEnum>& p1, Optional<MyEnum>& p3, const Current&)
+InitialI::opMyEnum(ICE_IN(Optional<MyEnum>) p1, Optional<MyEnum>& p3, const Current&)
{
p3 = p1;
return p1;
}
Optional<SmallStruct>
-InitialI::opSmallStruct(const Optional<SmallStruct>& p1, Optional<SmallStruct>& p3, const Current&)
+InitialI::opSmallStruct(ICE_IN(Optional<SmallStruct>) p1, Optional<SmallStruct>& p3, const Current&)
{
p3 = p1;
return p1;
}
Optional<FixedStruct>
-InitialI::opFixedStruct(const Optional<FixedStruct>& p1, Optional<FixedStruct>& p3, const Current&)
+InitialI::opFixedStruct(ICE_IN(Optional<FixedStruct>) p1, Optional<FixedStruct>& p3, const Current&)
{
p3 = p1;
return p1;
}
Optional<VarStruct>
-InitialI::opVarStruct(const Optional<VarStruct>& p1, Optional<VarStruct>& p3, const Current&)
+InitialI::opVarStruct(ICE_IN(Optional<VarStruct>) p1, Optional<VarStruct>& p3, const Current&)
{
p3 = p1;
return p1;
}
Optional<OneOptionalPtr>
-InitialI::opOneOptional(const Optional<OneOptionalPtr>& p1, Optional<OneOptionalPtr>& p3, const Current&)
+InitialI::opOneOptional(ICE_IN(Optional<OneOptionalPtr>) p1, Optional<OneOptionalPtr>& p3, const Current&)
{
p3 = p1;
return p1;
}
-Optional<OneOptionalPrx>
-InitialI::opOneOptionalProxy(const Optional<OneOptionalPrx>& p1, Optional<OneOptionalPrx>& p3, const Current&)
+Optional<OneOptionalPrxPtr>
+InitialI::opOneOptionalProxy(ICE_IN(Optional<OneOptionalPrxPtr>) p1, Optional<OneOptionalPrxPtr>& p3, const Current&)
{
p3 = p1;
return p1;
}
Optional<Test::ByteSeq>
-InitialI::opByteSeq(const Optional<pair<const Ice::Byte*, const Ice::Byte*> >& p1, Optional<Test::ByteSeq>& p3,
+InitialI::opByteSeq(ICE_IN(Optional<pair<const Ice::Byte*, const Ice::Byte*> >) p1, Optional<Test::ByteSeq>& p3,
const Current&)
{
if(p1)
@@ -201,7 +201,7 @@ InitialI::opByteSeq(const Optional<pair<const Ice::Byte*, const Ice::Byte*> >& p
}
Optional<Test::BoolSeq>
-InitialI::opBoolSeq(const Optional<pair<const bool*, const bool*> >& p1, Optional<Test::BoolSeq>& p3, const Current&)
+InitialI::opBoolSeq(ICE_IN(Optional<pair<const bool*, const bool*> >) p1, Optional<Test::BoolSeq>& p3, const Current&)
{
if(p1)
{
@@ -211,7 +211,7 @@ InitialI::opBoolSeq(const Optional<pair<const bool*, const bool*> >& p1, Optiona
}
Optional<Test::ShortSeq>
-InitialI::opShortSeq(const Optional<pair<const Short*, const Short*> >& p1, Optional<Test::ShortSeq>& p3,
+InitialI::opShortSeq(ICE_IN(Optional<pair<const Short*, const Short*> >) p1, Optional<Test::ShortSeq>& p3,
const Current&)
{
if(p1)
@@ -222,7 +222,7 @@ InitialI::opShortSeq(const Optional<pair<const Short*, const Short*> >& p1, Opti
}
Optional<Test::IntSeq>
-InitialI::opIntSeq(const Optional<pair<const Int*, const Int*> >& p1, Optional<Test::IntSeq>& p3, const Current&)
+InitialI::opIntSeq(ICE_IN(Optional<pair<const Int*, const Int*> >) p1, Optional<Test::IntSeq>& p3, const Current&)
{
if(p1)
{
@@ -232,7 +232,7 @@ InitialI::opIntSeq(const Optional<pair<const Int*, const Int*> >& p1, Optional<T
}
Optional<Test::LongSeq>
-InitialI::opLongSeq(const Optional<pair<const Long*, const Long*> >& p1, Optional<Test::LongSeq>& p3, const Current&)
+InitialI::opLongSeq(ICE_IN(Optional<pair<const Long*, const Long*> >) p1, Optional<Test::LongSeq>& p3, const Current&)
{
if(p1)
{
@@ -242,7 +242,7 @@ InitialI::opLongSeq(const Optional<pair<const Long*, const Long*> >& p1, Optiona
}
Optional<Test::FloatSeq>
-InitialI::opFloatSeq(const Optional<pair<const Float*, const Float*> >& p1, Optional<Test::FloatSeq>& p3,
+InitialI::opFloatSeq(ICE_IN(Optional<pair<const Float*, const Float*> >) p1, Optional<Test::FloatSeq>& p3,
const Current&)
{
if(p1)
@@ -253,7 +253,7 @@ InitialI::opFloatSeq(const Optional<pair<const Float*, const Float*> >& p1, Opti
}
Optional<Test::DoubleSeq>
-InitialI::opDoubleSeq(const Optional<pair<const Double*, const Double*> >& p1, Optional<Test::DoubleSeq>& p3,
+InitialI::opDoubleSeq(ICE_IN(Optional<pair<const Double*, const Double*> >) p1, Optional<Test::DoubleSeq>& p3,
const Current&)
{
if(p1)
@@ -263,6 +263,18 @@ InitialI::opDoubleSeq(const Optional<pair<const Double*, const Double*> >& p1, O
return p3;
}
+#ifdef ICE_CPP11_MAPPING
+optional<Ice::StringSeq>
+InitialI::opStringSeq(optional<Ice::StringSeq> p1,
+ optional<Ice::StringSeq>& p3, const Current&)
+{
+ if(p1)
+ {
+ p3 = p1;
+ }
+ return p3;
+}
+#else
Optional<Ice::StringSeq>
InitialI::opStringSeq(const Optional<pair<Ice::StringSeq::const_iterator, Ice::StringSeq::const_iterator> >& p1,
Optional<Ice::StringSeq>& p3, const Current&)
@@ -273,9 +285,10 @@ InitialI::opStringSeq(const Optional<pair<Ice::StringSeq::const_iterator, Ice::S
}
return p3;
}
+#endif
Optional<SmallStructSeq>
-InitialI::opSmallStructSeq(const Optional<pair<const SmallStruct*, const SmallStruct*> >& p1,
+InitialI::opSmallStructSeq(ICE_IN(Optional<pair<const SmallStruct*, const SmallStruct*> >) p1,
Optional<SmallStructSeq>& p3, const Current&)
{
if(p1)
@@ -286,7 +299,7 @@ InitialI::opSmallStructSeq(const Optional<pair<const SmallStruct*, const SmallSt
}
Optional<SmallStructList>
-InitialI::opSmallStructList(const Optional<pair<const SmallStruct*, const SmallStruct*> >& p1,
+InitialI::opSmallStructList(ICE_IN(Optional<pair<const SmallStruct*, const SmallStruct*> >) p1,
Optional<SmallStructList>& p3, const Current&)
{
if(p1)
@@ -297,7 +310,7 @@ InitialI::opSmallStructList(const Optional<pair<const SmallStruct*, const SmallS
}
Optional<FixedStructSeq>
-InitialI::opFixedStructSeq(const Optional<pair<const FixedStruct*, const FixedStruct*> >& p1,
+InitialI::opFixedStructSeq(ICE_IN(Optional<pair<const FixedStruct*, const FixedStruct*> >) p1,
Optional<FixedStructSeq>& p3, const Current&)
{
if(p1)
@@ -308,7 +321,7 @@ InitialI::opFixedStructSeq(const Optional<pair<const FixedStruct*, const FixedSt
}
Optional<FixedStructList>
-InitialI::opFixedStructList(const Optional<pair<const FixedStruct*, const FixedStruct*> >& p1,
+InitialI::opFixedStructList(ICE_IN(Optional<pair<const FixedStruct*, const FixedStruct*> >) p1,
Optional<FixedStructList>& p3, const Current&)
{
if(p1)
@@ -318,6 +331,18 @@ InitialI::opFixedStructList(const Optional<pair<const FixedStruct*, const FixedS
return p3;
}
+#ifdef ICE_CPP11_MAPPING
+optional<VarStructSeq>
+InitialI::opVarStructSeq(optional<VarStructSeq> p1,
+ optional<VarStructSeq>& p3, const Current&)
+{
+ if(p1)
+ {
+ p3 = p1;
+ }
+ return p3;
+}
+#else
Optional<VarStructSeq>
InitialI::opVarStructSeq(const Optional<pair<VarStructSeq::const_iterator, VarStructSeq::const_iterator> >& p1,
Optional<VarStructSeq>& p3, const Current&)
@@ -328,37 +353,38 @@ InitialI::opVarStructSeq(const Optional<pair<VarStructSeq::const_iterator, VarSt
}
return p3;
}
+#endif
Optional<Serializable>
-InitialI::opSerializable(const Optional<Serializable>& p1, Optional<Serializable>& p3, const Current&)
+InitialI::opSerializable(ICE_IN(Optional<Serializable>) p1, Optional<Serializable>& p3, const Current&)
{
p3 = p1;
return p3;
}
Optional<IntIntDict>
-InitialI::opIntIntDict(const Optional<IntIntDict>& p1, Optional<IntIntDict>& p3, const Current&)
+InitialI::opIntIntDict(ICE_IN(Optional<IntIntDict>) p1, Optional<IntIntDict>& p3, const Current&)
{
p3 = p1;
return p3;
}
Optional<StringIntDict>
-InitialI::opStringIntDict(const Optional<StringIntDict>& p1, Optional<StringIntDict>& p3, const Current&)
+InitialI::opStringIntDict(ICE_IN(Optional<StringIntDict>) p1, Optional<StringIntDict>& p3, const Current&)
{
p3 = p1;
return p3;
}
Optional<IntOneOptionalDict>
-InitialI::opIntOneOptionalDict(const Optional<IntOneOptionalDict>& p1, Optional<IntOneOptionalDict>& p3, const Current&)
+InitialI::opIntOneOptionalDict(ICE_IN(Optional<IntOneOptionalDict>) p1, Optional<IntOneOptionalDict>& p3, const Current&)
{
p3 = p1;
return p3;
}
Optional<IntStringDict>
-InitialI::opCustomIntStringDict(const Optional<std::map<int, Util::string_view> >& p1,
+InitialI::opCustomIntStringDict(ICE_IN(Optional<std::map<int, Util::string_view> >) p1,
Optional<IntStringDict>& p3, const Current&)
{
if(p1)
@@ -375,23 +401,23 @@ InitialI::opCustomIntStringDict(const Optional<std::map<int, Util::string_view>
void
-InitialI::opClassAndUnknownOptional(const APtr&, const Ice::Current&)
+InitialI::opClassAndUnknownOptional(ICE_IN(APtr), const Ice::Current&)
{
}
void
-InitialI::sendOptionalClass(bool, const Optional<OneOptionalPtr>&, const Ice::Current&)
+InitialI::sendOptionalClass(bool, ICE_IN(Optional<OneOptionalPtr>), const Ice::Current&)
{
}
void
InitialI::returnOptionalClass(bool, Optional<OneOptionalPtr>& o, const Ice::Current&)
{
- o = new OneOptional(53);
+ o = ICE_MAKE_SHARED(OneOptional, 53);
}
GPtr
-InitialI::opG(const GPtr& g, const Ice::Current&)
+InitialI::opG(ICE_IN(GPtr) g, const Ice::Current&)
{
return g;
}
diff --git a/cpp/test/Ice/optional/TestI.h b/cpp/test/Ice/optional/TestI.h
index d2a42cb5acd..2b050b5878e 100644
--- a/cpp/test/Ice/optional/TestI.h
+++ b/cpp/test/Ice/optional/TestI.h
@@ -12,185 +12,209 @@
#include <Test.h>
+#ifdef ICE_CPP11_MAPPING
+namespace Test
+{
+using OneOptionalPrxPtr = std::shared_ptr<Ice::ObjectPrx>;
+}
+#endif
-class InitialI : public Test::Initial
+
+class InitialI :
+#ifdef ICE_CPP11_MAPPING
+ public Test::InitialDisp
+#else
+ public Test::Initial
+#endif
{
public:
- InitialI();
+ InitialI();
virtual void shutdown(const Ice::Current&);
- virtual Ice::ObjectPtr pingPong(const Ice::ObjectPtr&, const Ice::Current&);
+ virtual Ice::ValuePtr pingPong(ICE_IN(Ice::ValuePtr), const Ice::Current&);
- virtual void opOptionalException(const IceUtil::Optional< ::Ice::Int>&,
- const IceUtil::Optional< ::std::string>&,
- const IceUtil::Optional<Test::OneOptionalPtr>&,
+ virtual void opOptionalException(ICE_IN(IceUtil::Optional< ::Ice::Int>),
+ ICE_IN(IceUtil::Optional< ::std::string>),
+ ICE_IN(IceUtil::Optional<Test::OneOptionalPtr>),
const Ice::Current&);
- virtual void opDerivedException(const IceUtil::Optional< ::Ice::Int>&,
- const IceUtil::Optional< ::std::string>&,
- const IceUtil::Optional<Test::OneOptionalPtr>&,
+ virtual void opDerivedException(ICE_IN(IceUtil::Optional< ::Ice::Int>),
+ ICE_IN(IceUtil::Optional< ::std::string>),
+ ICE_IN(IceUtil::Optional<Test::OneOptionalPtr>),
const Ice::Current&);
- virtual void opRequiredException(const IceUtil::Optional< ::Ice::Int>&,
- const IceUtil::Optional< ::std::string>&,
- const IceUtil::Optional<Test::OneOptionalPtr>&,
+ virtual void opRequiredException(ICE_IN(IceUtil::Optional< ::Ice::Int>),
+ ICE_IN(IceUtil::Optional< ::std::string>),
+ ICE_IN(IceUtil::Optional<Test::OneOptionalPtr>),
const Ice::Current&);
- virtual IceUtil::Optional< ::Ice::Byte> opByte(const IceUtil::Optional< ::Ice::Byte>&,
+ virtual IceUtil::Optional< ::Ice::Byte> opByte(ICE_IN(IceUtil::Optional< ::Ice::Byte>),
IceUtil::Optional< ::Ice::Byte>&,
const ::Ice::Current&);
- virtual IceUtil::Optional< bool> opBool(const IceUtil::Optional< bool>&, IceUtil::Optional< bool>&,
- const ::Ice::Current&);
+ virtual IceUtil::Optional<bool> opBool(ICE_IN(IceUtil::Optional<bool>), IceUtil::Optional<bool>&,
+ const ::Ice::Current&);
- virtual IceUtil::Optional< ::Ice::Short> opShort(const IceUtil::Optional< ::Ice::Short>&,
+ virtual IceUtil::Optional< ::Ice::Short> opShort(ICE_IN(IceUtil::Optional< ::Ice::Short>),
IceUtil::Optional< ::Ice::Short>&,
const ::Ice::Current&);
- virtual IceUtil::Optional< ::Ice::Int> opInt(const IceUtil::Optional< ::Ice::Int>&,
+ virtual IceUtil::Optional< ::Ice::Int> opInt(ICE_IN(IceUtil::Optional< ::Ice::Int>),
IceUtil::Optional< ::Ice::Int>&,
const ::Ice::Current&);
- virtual IceUtil::Optional< ::Ice::Long> opLong(const IceUtil::Optional< ::Ice::Long>&,
+ virtual IceUtil::Optional< ::Ice::Long> opLong(ICE_IN(IceUtil::Optional< ::Ice::Long>),
IceUtil::Optional< ::Ice::Long>&,
const ::Ice::Current&);
- virtual IceUtil::Optional< ::Ice::Float> opFloat(const IceUtil::Optional< ::Ice::Float>&,
+ virtual IceUtil::Optional< ::Ice::Float> opFloat(ICE_IN(IceUtil::Optional< ::Ice::Float>),
IceUtil::Optional< ::Ice::Float>&,
const ::Ice::Current&);
- virtual IceUtil::Optional< ::Ice::Double> opDouble(const IceUtil::Optional< ::Ice::Double>&,
+ virtual IceUtil::Optional< ::Ice::Double> opDouble(ICE_IN(IceUtil::Optional< ::Ice::Double>),
IceUtil::Optional< ::Ice::Double>&,
const ::Ice::Current&);
- virtual IceUtil::Optional< ::std::string> opString(const IceUtil::Optional< ::std::string>&,
+ virtual IceUtil::Optional< ::std::string> opString(ICE_IN(IceUtil::Optional< ::std::string>),
IceUtil::Optional< ::std::string>&,
const ::Ice::Current&);
- virtual IceUtil::Optional< ::std::string> opCustomString(const IceUtil::Optional< Util::string_view>&,
+ virtual IceUtil::Optional< ::std::string> opCustomString(ICE_IN(IceUtil::Optional< Util::string_view>),
IceUtil::Optional< ::std::string>&,
const ::Ice::Current&);
- virtual IceUtil::Optional< Test::MyEnum> opMyEnum(const IceUtil::Optional<Test::MyEnum>&,
+ virtual IceUtil::Optional< Test::MyEnum> opMyEnum(ICE_IN(IceUtil::Optional<Test::MyEnum>),
IceUtil::Optional<Test::MyEnum>&,
const ::Ice::Current&);
- virtual IceUtil::Optional<Test::SmallStruct> opSmallStruct(const IceUtil::Optional<Test::SmallStruct>&,
+ virtual IceUtil::Optional<Test::SmallStruct> opSmallStruct(ICE_IN(IceUtil::Optional<Test::SmallStruct>),
IceUtil::Optional<Test::SmallStruct>&,
const ::Ice::Current&);
- virtual IceUtil::Optional<Test::FixedStruct> opFixedStruct(const IceUtil::Optional<Test::FixedStruct>&,
+ virtual IceUtil::Optional<Test::FixedStruct> opFixedStruct(ICE_IN(IceUtil::Optional<Test::FixedStruct>),
IceUtil::Optional<Test::FixedStruct>&,
const ::Ice::Current&);
- virtual IceUtil::Optional<Test::VarStruct> opVarStruct(const IceUtil::Optional<Test::VarStruct>&,
+ virtual IceUtil::Optional<Test::VarStruct> opVarStruct(ICE_IN(IceUtil::Optional<Test::VarStruct>),
IceUtil::Optional<Test::VarStruct>&,
const ::Ice::Current&);
- virtual IceUtil::Optional<Test::OneOptionalPtr> opOneOptional(const IceUtil::Optional< Test::OneOptionalPtr>&,
+ virtual IceUtil::Optional<Test::OneOptionalPtr> opOneOptional(ICE_IN(IceUtil::Optional< Test::OneOptionalPtr>),
IceUtil::Optional< Test::OneOptionalPtr>&,
const ::Ice::Current&);
- virtual IceUtil::Optional<Test::OneOptionalPrx> opOneOptionalProxy(const IceUtil::Optional< Test::OneOptionalPrx>&,
- IceUtil::Optional< Test::OneOptionalPrx>&,
- const ::Ice::Current&);
+ virtual IceUtil::Optional<Test::OneOptionalPrxPtr> opOneOptionalProxy(ICE_IN(IceUtil::Optional< Test::OneOptionalPrxPtr>),
+ IceUtil::Optional< Test::OneOptionalPrxPtr>&,
+ const ::Ice::Current&);
virtual IceUtil::Optional< ::Test::ByteSeq> opByteSeq(
- const IceUtil::Optional< ::std::pair<const ::Ice::Byte*, const ::Ice::Byte*> >&,
+ ICE_IN(IceUtil::Optional< ::std::pair<const ::Ice::Byte*, const ::Ice::Byte*> >),
IceUtil::Optional< ::Test::ByteSeq>&,
const ::Ice::Current& = ::Ice::noExplicitCurrent);
virtual IceUtil::Optional< ::Test::BoolSeq> opBoolSeq(
- const IceUtil::Optional< ::std::pair<const bool*, const bool*> >&,
+ ICE_IN(IceUtil::Optional< ::std::pair<const bool*, const bool*> >),
IceUtil::Optional< ::Test::BoolSeq>&,
const ::Ice::Current& = ::Ice::noExplicitCurrent);
virtual IceUtil::Optional< ::Test::ShortSeq> opShortSeq(
- const IceUtil::Optional< ::std::pair<const ::Ice::Short*, const ::Ice::Short*> >&,
+ ICE_IN(IceUtil::Optional< ::std::pair<const ::Ice::Short*, const ::Ice::Short*> >),
IceUtil::Optional< ::Test::ShortSeq>&,
const ::Ice::Current& = ::Ice::noExplicitCurrent);
virtual IceUtil::Optional< ::Test::IntSeq> opIntSeq(
- const IceUtil::Optional< ::std::pair<const ::Ice::Int*, const ::Ice::Int*> >&,
+ ICE_IN(IceUtil::Optional< ::std::pair<const ::Ice::Int*, const ::Ice::Int*> >),
IceUtil::Optional< ::Test::IntSeq>&,
const ::Ice::Current& = ::Ice::noExplicitCurrent);
virtual IceUtil::Optional< ::Test::LongSeq> opLongSeq(
- const IceUtil::Optional< ::std::pair<const ::Ice::Long*, const ::Ice::Long*> >&,
+ ICE_IN(IceUtil::Optional< ::std::pair<const ::Ice::Long*, const ::Ice::Long*> >),
IceUtil::Optional< ::Test::LongSeq>&,
const ::Ice::Current& = ::Ice::noExplicitCurrent);
virtual IceUtil::Optional< ::Test::FloatSeq> opFloatSeq(
- const IceUtil::Optional< ::std::pair<const ::Ice::Float*, const ::Ice::Float*> >&,
+ ICE_IN(IceUtil::Optional< ::std::pair<const ::Ice::Float*, const ::Ice::Float*> >),
IceUtil::Optional< ::Test::FloatSeq>&,
const ::Ice::Current& = ::Ice::noExplicitCurrent);
virtual IceUtil::Optional< ::Test::DoubleSeq> opDoubleSeq(
- const IceUtil::Optional< ::std::pair<const ::Ice::Double*, const ::Ice::Double*> >&,
+ ICE_IN(IceUtil::Optional< ::std::pair<const ::Ice::Double*, const ::Ice::Double*> >),
IceUtil::Optional< ::Test::DoubleSeq>&,
const ::Ice::Current& = ::Ice::noExplicitCurrent);
+#ifdef ICE_CPP11_MAPPING
+ virtual Ice::optional<::Test::StringSeq> opStringSeq(
+ Ice::optional<::Test::StringSeq>,
+ Ice::optional<::Test::StringSeq>&, const ::Ice::Current& = ::Ice::noExplicitCurrent) ;
+#else
virtual IceUtil::Optional< ::Test::StringSeq> opStringSeq(
const IceUtil::Optional< ::std::pair< ::Test::StringSeq::const_iterator,
::Test::StringSeq::const_iterator> >&,
IceUtil::Optional< ::Test::StringSeq>&,
const ::Ice::Current& = ::Ice::noExplicitCurrent);
+#endif
virtual IceUtil::Optional< ::Test::SmallStructSeq> opSmallStructSeq(
- const IceUtil::Optional< ::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*> >&,
+ ICE_IN(IceUtil::Optional< ::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*> >),
IceUtil::Optional< ::Test::SmallStructSeq>&, const ::Ice::Current& = ::Ice::noExplicitCurrent);
virtual IceUtil::Optional< ::Test::SmallStructList> opSmallStructList(
- const IceUtil::Optional< ::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*> >&,
+ ICE_IN(IceUtil::Optional< ::std::pair<const ::Test::SmallStruct*, const ::Test::SmallStruct*> >),
IceUtil::Optional< ::Test::SmallStructList>&, const ::Ice::Current& = ::Ice::noExplicitCurrent);
virtual IceUtil::Optional< ::Test::FixedStructSeq> opFixedStructSeq(
- const IceUtil::Optional< ::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*> >&,
+ ICE_IN(IceUtil::Optional< ::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*> >),
IceUtil::Optional< ::Test::FixedStructSeq>&, const ::Ice::Current& = ::Ice::noExplicitCurrent);
virtual IceUtil::Optional< ::Test::FixedStructList> opFixedStructList(
- const IceUtil::Optional< ::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*> >&,
+ ICE_IN(IceUtil::Optional< ::std::pair<const ::Test::FixedStruct*, const ::Test::FixedStruct*> >),
IceUtil::Optional< ::Test::FixedStructList>&, const ::Ice::Current& = ::Ice::noExplicitCurrent);
+#ifdef ICE_CPP11_MAPPING
+ virtual Ice::optional<::Test::VarStructSeq> opVarStructSeq(
+ Ice::optional<::Test::VarStructSeq>, Ice::optional<::Test::VarStructSeq>&,
+ const ::Ice::Current& = ::Ice::noExplicitCurrent);
+#else
virtual IceUtil::Optional< ::Test::VarStructSeq> opVarStructSeq(
const IceUtil::Optional< ::std::pair< ::Test::VarStructSeq::const_iterator,
::Test::VarStructSeq::const_iterator> >&,
IceUtil::Optional< ::Test::VarStructSeq>&,
const ::Ice::Current& = ::Ice::noExplicitCurrent);
+#endif
virtual IceUtil::Optional< ::Test::Serializable> opSerializable(
- const IceUtil::Optional< ::Test::Serializable>&,
+ ICE_IN(IceUtil::Optional< ::Test::Serializable>),
IceUtil::Optional< ::Test::Serializable>&,
const ::Ice::Current& = ::Ice::noExplicitCurrent);
virtual IceUtil::Optional< ::Test::IntIntDict> opIntIntDict(
- const IceUtil::Optional< ::Test::IntIntDict>&,
+ ICE_IN(IceUtil::Optional< ::Test::IntIntDict>),
IceUtil::Optional< ::Test::IntIntDict>&,
const ::Ice::Current& = ::Ice::noExplicitCurrent);
virtual IceUtil::Optional< ::Test::StringIntDict> opStringIntDict(
- const IceUtil::Optional< ::Test::StringIntDict>&,
+ ICE_IN(IceUtil::Optional< ::Test::StringIntDict>),
IceUtil::Optional< ::Test::StringIntDict>&,
const ::Ice::Current& = ::Ice::noExplicitCurrent);
virtual IceUtil::Optional< ::Test::IntOneOptionalDict> opIntOneOptionalDict(
- const IceUtil::Optional< ::Test::IntOneOptionalDict>&,
+ ICE_IN(IceUtil::Optional< ::Test::IntOneOptionalDict>),
IceUtil::Optional< ::Test::IntOneOptionalDict>&,
const ::Ice::Current& = ::Ice::noExplicitCurrent);
virtual IceUtil::Optional< ::Test::IntStringDict> opCustomIntStringDict(
- const IceUtil::Optional<std::map<int, Util::string_view> >&,
+ ICE_IN(IceUtil::Optional<std::map<int, Util::string_view> >),
IceUtil::Optional< ::Test::IntStringDict>&,
const ::Ice::Current& = ::Ice::noExplicitCurrent);
- virtual void opClassAndUnknownOptional(const Test::APtr&, const Ice::Current&);
+ virtual void opClassAndUnknownOptional(ICE_IN(Test::APtr), const Ice::Current&);
- virtual void sendOptionalClass(bool, const IceUtil::Optional<Test::OneOptionalPtr>&, const Ice::Current&);
+ virtual void sendOptionalClass(bool, ICE_IN(IceUtil::Optional<Test::OneOptionalPtr>), const Ice::Current&);
virtual void returnOptionalClass(bool, IceUtil::Optional<Test::OneOptionalPtr>&, const Ice::Current&);
- virtual ::Test::GPtr opG(const ::Test::GPtr& g, const Ice::Current&);
+ virtual ::Test::GPtr opG(ICE_IN(::Test::GPtr) g, const Ice::Current&);
virtual void opVoid(const Ice::Current&);
diff --git a/cpp/test/Ice/optional/msbuild/client/client.vcxproj b/cpp/test/Ice/optional/msbuild/client/client.vcxproj
index 0b0d72d31d2..85f4f806cb7 100644
--- a/cpp/test/Ice/optional/msbuild/client/client.vcxproj
+++ b/cpp/test/Ice/optional/msbuild/client/client.vcxproj
@@ -121,6 +121,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Cpp11-Debug|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <DisableSpecificWarnings>4250;4251;4275;4503</DisableSpecificWarnings>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -131,6 +132,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Cpp11-Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <DisableSpecificWarnings>4250;4251;4275;4503</DisableSpecificWarnings>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -141,6 +143,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Cpp11-Debug|x64'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <DisableSpecificWarnings>4250;4251;4275;4503</DisableSpecificWarnings>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -151,6 +154,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Cpp11-Release|x64'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <DisableSpecificWarnings>4250;4251;4275;4503</DisableSpecificWarnings>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
diff --git a/cpp/test/Ice/optional/msbuild/server/server.vcxproj b/cpp/test/Ice/optional/msbuild/server/server.vcxproj
index 79b92740c72..95941e4f5fc 100644
--- a/cpp/test/Ice/optional/msbuild/server/server.vcxproj
+++ b/cpp/test/Ice/optional/msbuild/server/server.vcxproj
@@ -120,6 +120,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Cpp11-Debug|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <DisableSpecificWarnings>4250;4251;4275;4503</DisableSpecificWarnings>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -130,6 +131,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Cpp11-Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <DisableSpecificWarnings>4250;4251;4275;4503</DisableSpecificWarnings>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -140,6 +142,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Cpp11-Debug|x64'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <DisableSpecificWarnings>4250;4251;4275;4503</DisableSpecificWarnings>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -150,6 +153,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Cpp11-Release|x64'">
<ClCompile>
<AdditionalIncludeDirectories>..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <DisableSpecificWarnings>4250;4251;4275;4503</DisableSpecificWarnings>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
diff --git a/cpp/test/Ice/optional/msbuild/serveramd/serveramd.vcxproj b/cpp/test/Ice/optional/msbuild/serveramd/serveramd.vcxproj
index 9e49d81330b..29eb65cf263 100644
--- a/cpp/test/Ice/optional/msbuild/serveramd/serveramd.vcxproj
+++ b/cpp/test/Ice/optional/msbuild/serveramd/serveramd.vcxproj
@@ -122,6 +122,7 @@
<ClCompile>
<AdditionalIncludeDirectories>..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>ICE_AMD_TEST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <DisableSpecificWarnings>4250;4251;4275;4503</DisableSpecificWarnings>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -134,6 +135,7 @@
<ClCompile>
<AdditionalIncludeDirectories>..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>ICE_AMD_TEST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <DisableSpecificWarnings>4250;4251;4275;4503</DisableSpecificWarnings>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
@@ -146,6 +148,7 @@
<ClCompile>
<AdditionalIncludeDirectories>..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>ICE_AMD_TEST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <DisableSpecificWarnings>4250;4251;4275;4503</DisableSpecificWarnings>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -158,6 +161,7 @@
<ClCompile>
<AdditionalIncludeDirectories>..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>ICE_AMD_TEST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <DisableSpecificWarnings>4250;4251;4275;4503</DisableSpecificWarnings>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>