diff --git a/ydb/core/tablet_flat/flat_cxx_database.h b/ydb/core/tablet_flat/flat_cxx_database.h index aa4ed80e5541..ce99341a9bb1 100644 --- a/ydb/core/tablet_flat/flat_cxx_database.h +++ b/ydb/core/tablet_flat/flat_cxx_database.h @@ -2,12 +2,12 @@ #include #include -#include #include #include #include #include +#include #include // https://wiki.yandex-team.ru/kikimr/techdoc/db/cxxapi/nicedb/ @@ -1437,7 +1437,7 @@ struct Schema { } template - auto GetValueOrDefault(typename ColumnType::Type defaultValue = GetDefaultValue(SFINAE::special())) const { + auto GetValueOrDefault(typename ColumnType::Type defaultValue = GetDefaultValue()) const { Y_DEBUG_ABORT_UNLESS(IsReady(), "Rowset is not ready"); Y_DEBUG_ABORT_UNLESS(IsValid(), "Rowset is not valid"); typename ColumnType::Type value(HaveValue() ? GetColumnValue() : defaultValue); @@ -1462,24 +1462,19 @@ struct Schema { return DbgPrintTuple(Iterator.GetKey(), typeRegistry) + " -> " + DbgPrintTuple(Iterator.GetValues(), typeRegistry); } - template ::type = 0> - static decltype(ColumnType::Default) GetNullValue(SFINAE::special) { - return ColumnType::Default; - } - template - static typename ColumnType::Type GetNullValue(SFINAE::general) { - return typename ColumnType::Type(); - } - - template ::type = 0> - static decltype(ColumnType::Default) GetDefaultValue(SFINAE::special) { - return ColumnType::Default; + static typename ColumnType::Type GetNullValue() { + return GetDefaultValue(); } template - static typename ColumnType::Type GetDefaultValue(SFINAE::general) { - return typename ColumnType::Type(); + static typename ColumnType::Type GetDefaultValue() { + constexpr bool hasDefault = requires {ColumnType::Default;}; + if constexpr (hasDefault) { + return ColumnType::Default; + } else { + return typename ColumnType::Type(); + } } NTable::TIteratorStats* Stats() const { @@ -1499,7 +1494,7 @@ struct Schema { auto& cell = tuple.Columns[index]; auto type = tuple.Types[index]; if (cell.IsNull()) - return GetNullValue(SFINAE::special()); + return GetNullValue(); return TConvert::Convert(TRawTypeValue(cell.Data(), cell.Size(), type)); } diff --git a/ydb/core/util/templates.h b/ydb/core/util/templates.h deleted file mode 100644 index 68596db50dc3..000000000000 --- a/ydb/core/util/templates.h +++ /dev/null @@ -1,41 +0,0 @@ -#pragma once - -namespace NKikimr { - -// first_of - -template -struct first_of { - using type = T; -}; - -// max_of - -template -struct max_of; -template -struct max_of { - static constexpr std::size_t value = I; -}; -template -struct max_of { - static constexpr std::size_t value = A > B ? A : B; -}; -template -struct max_of { - static constexpr std::size_t value = max_of::value, I...>::value; -}; - -namespace SFINAE { - -template -struct type_check { - using type = int; -}; - -struct general {}; -struct special : general {}; - -} - -} diff --git a/ydb/core/util/ya.make b/ydb/core/util/ya.make index 5067894348be..5e4d7db08157 100644 --- a/ydb/core/util/ya.make +++ b/ydb/core/util/ya.make @@ -46,7 +46,6 @@ SRCS( single_thread_ic_mock.h stlog.cpp stlog.h - templates.h testactorsys.cpp testactorsys.h text.cpp