1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-05-10 07:10:32 +08:00
CMake/Source/cmArgumentParserTypes.h
makise-homura a438a0460a ArgumentParserTypes: implement a workaround for EDG 6 assertion failure
While building CMake on EDG 603+-based compiler, such as LCC 1.27.x,
an internal assertion failure may be experienced with a message like
'assertion failed at: "il.c", line 15635 in i_copy_dynamic_init'.

This commit introduces a workaround that helps avoiding this.

Workaround is enabled only for LCC based on this EDG frontend,
it is not known if it is needed for any other compilers, since
there were none found based on EDG 603 and later and having this bug.
2025-01-17 07:37:24 +03:00

77 lines
1.4 KiB
C++

/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
#pragma once
#include "cmConfigure.h" // IWYU pragma: keep
#if defined(__SUNPRO_CC) || defined(__EDG__)
# include <string>
# include <vector>
namespace ArgumentParser {
template <typename T>
struct Maybe;
template <>
struct Maybe<std::string> : public std::string
{
using std::string::basic_string;
};
template <typename T>
struct MaybeEmpty;
# if defined(__LCC__) && (__EDG_VERSION__ >= 603)
template <>
struct MaybeEmpty<std::vector<std::string>> : public std::vector<std::string>
{
using std::vector<std::string>::vector;
};
# endif
template <typename T>
struct MaybeEmpty<std::vector<T>> : public std::vector<T>
{
using std::vector<T>::vector;
};
template <typename T>
struct NonEmpty;
template <typename T>
struct NonEmpty<std::vector<T>> : public std::vector<T>
{
using std::vector<T>::vector;
};
template <>
struct NonEmpty<std::string> : public std::string
{
using std::string::basic_string;
};
} // namespace ArgumentParser
#else
namespace ArgumentParser {
template <typename T>
struct Maybe : public T
{
using T::T;
};
template <typename T>
struct MaybeEmpty : public T
{
using T::T;
};
template <typename T>
struct NonEmpty : public T
{
using T::T;
};
} // namespace ArgumentParser
#endif