fix clang-5 build
This commit is contained in:
parent
ad59562c9e
commit
f7554a166f
3 changed files with 39 additions and 7 deletions
28
.travis.yml
28
.travis.yml
|
@ -39,6 +39,34 @@ matrix:
|
||||||
env:
|
env:
|
||||||
- CXX_COMPILER=g++-9 CC_COMPILER=gcc-9
|
- CXX_COMPILER=g++-9 CC_COMPILER=gcc-9
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-5 main'
|
||||||
|
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
|
||||||
|
packages:
|
||||||
|
- g++-7
|
||||||
|
- clang-5
|
||||||
|
env:
|
||||||
|
- CXX_COMPILER=clang++-5 CC_COMPILER=clang-5
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: clang++
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-6 main'
|
||||||
|
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
|
||||||
|
packages:
|
||||||
|
- g++-7
|
||||||
|
- clang-6
|
||||||
|
env:
|
||||||
|
- CXX_COMPILER=clang++-6 CC_COMPILER=clang-6
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: clang++
|
compiler: clang++
|
||||||
addons:
|
addons:
|
||||||
|
|
|
@ -113,7 +113,7 @@ If you are using [Conan](https://www.conan.io/) to manage your dependencies, mer
|
||||||
|
|
||||||
## Compiler compatibility
|
## Compiler compatibility
|
||||||
|
|
||||||
* Clang/LLVM >= 7
|
* Clang/LLVM >= 5
|
||||||
* Visual C++ >= 15.3 / Visual Studio >= 2017
|
* Visual C++ >= 15.3 / Visual Studio >= 2017
|
||||||
* Xcode >= 10
|
* Xcode >= 10
|
||||||
* GCC >= 7 (GCC >= 9 for NAMEOF_ENUM)
|
* GCC >= 7 (GCC >= 9 for NAMEOF_ENUM)
|
||||||
|
|
|
@ -94,6 +94,15 @@ class [[nodiscard]] cstring {
|
||||||
|
|
||||||
std::array<char, N + 1> chars_;
|
std::array<char, N + 1> chars_;
|
||||||
|
|
||||||
|
constexpr auto to_chars(std::string_view str) noexcept {
|
||||||
|
assert(str.size() == N);
|
||||||
|
decltype(chars_) chars = {};
|
||||||
|
for (std::size_t i = 0; i < str.size() && i < N; ++i) {
|
||||||
|
chars[i] = str[i];
|
||||||
|
}
|
||||||
|
return chars;
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
using value_type = char;
|
using value_type = char;
|
||||||
using size_type = std::size_t;
|
using size_type = std::size_t;
|
||||||
|
@ -109,12 +118,7 @@ class [[nodiscard]] cstring {
|
||||||
using reverse_iterator = std::reverse_iterator<iterator>;
|
using reverse_iterator = std::reverse_iterator<iterator>;
|
||||||
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
|
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
|
||||||
|
|
||||||
constexpr explicit cstring(std::string_view str) noexcept : chars_{} {
|
constexpr explicit cstring(std::string_view str) noexcept : chars_{to_chars(str)} {}
|
||||||
assert(str.size() == N);
|
|
||||||
for (std::size_t i = 0; i < N; ++i) {
|
|
||||||
chars_[i] = str[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
constexpr cstring() = delete;
|
constexpr cstring() = delete;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue