From 05260ace94833685c9f1966ef37e85a227f7983c Mon Sep 17 00:00:00 2001 From: Gioacchino Mazzurco Date: Wed, 30 Oct 2019 14:24:19 +0100 Subject: [PATCH] Backport as_const C++17 helper This is expecially useful to use const_iterator without giving up on using auto keyword --- libretroshare/src/libretroshare.pro | 1 + libretroshare/src/util/cxx17retrocompat.h | 35 +++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 libretroshare/src/util/cxx17retrocompat.h diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 01cbc8852..360eb4ab8 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -503,6 +503,7 @@ HEADERS += util/folderiterator.h \ util/stacktrace.h \ util/rsdeprecate.h \ util/cxx11retrocompat.h \ + util/cxx17retrocompat.h \ util/rsurl.h SOURCES += ft/ftchunkmap.cc \ diff --git a/libretroshare/src/util/cxx17retrocompat.h b/libretroshare/src/util/cxx17retrocompat.h new file mode 100644 index 000000000..58cdfe84c --- /dev/null +++ b/libretroshare/src/util/cxx17retrocompat.h @@ -0,0 +1,35 @@ +/******************************************************************************* + * libretroshare/src/util: cxx17retrocompat.h * + * * + * libretroshare: retroshare core library * + * * + * Copyright (C) 2019 Gioacchino Mazzurco * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Lesser General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public License * + * along with this program. If not, see . * + * * + *******************************************************************************/ +#pragma once + +#if __cplusplus < 201703L + +#include + +namespace std +{ +using namespace std; +template constexpr typename add_const::type& as_const(T& t) noexcept +{ return t; } +template void as_const(const T&&) = delete; +} +#endif // __cplusplus < 201703L