is_contiguous(const Iterator &first, const Iterator &last)
{
const auto n = std::distance(first, last);
- for (typename std::decay<decltype(n)>::type i = 0; i < n; ++i)
+ for (std::decay_t<decltype(n)> i = 0; i < n; ++i)
if (std::addressof(*(std::next(first, i))) !=
std::next(std::addressof(*first), i))
return false;
void
sum(const T &values, const MPI_Comm mpi_communicator, U &sums)
{
- static_assert(std::is_same_v<typename std::decay<T>::type,
- typename std::decay<U>::type>,
+ static_assert(std::is_same_v<std::decay_t<T>, std::decay_t<U>>,
"Input and output arguments must have the same type!");
const auto array_view_values = make_array_view(values);
using const_type =
void
max(const T &values, const MPI_Comm mpi_communicator, U &maxima)
{
- static_assert(std::is_same_v<typename std::decay<T>::type,
- typename std::decay<U>::type>,
+ static_assert(std::is_same_v<std::decay_t<T>, std::decay_t<U>>,
"Input and output arguments must have the same type!");
const auto array_view_values = make_array_view(values);
using const_type =
void
min(const T &values, const MPI_Comm mpi_communicator, U &minima)
{
- static_assert(std::is_same_v<typename std::decay<T>::type,
- typename std::decay<U>::type>,
+ static_assert(std::is_same_v<std::decay_t<T>, std::decay_t<U>>,
"Input and output arguments must have the same type!");
const auto array_view_values = make_array_view(values);
using const_type =
void
logical_or(const T &values, const MPI_Comm mpi_communicator, U &results)
{
- static_assert(std::is_same_v<typename std::decay<T>::type,
- typename std::decay<U>::type>,
+ static_assert(std::is_same_v<std::decay_t<T>, std::decay_t<U>>,
"Input and output arguments must have the same type!");
static_assert(std::is_integral<typename T::value_type>::value,
template <typename F>
static constexpr DEAL_II_HOST_DEVICE_ALWAYS_INLINE T
value(const F &f,
- std::enable_if_t<!std::is_same_v<typename std::decay<T>::type,
- typename std::decay<F>::type> &&
+ std::enable_if_t<!std::is_same_v<std::decay_t<T>, std::decay_t<F>> &&
std::is_constructible<T, F>::value> * = nullptr)
{
return T(f);
template <typename F>
static constexpr DEAL_II_HOST_DEVICE_ALWAYS_INLINE T
value(const F &f,
- std::enable_if_t<!std::is_same_v<typename std::decay<T>::type,
- typename std::decay<F>::type> &&
+ std::enable_if_t<!std::is_same_v<std::decay_t<T>, std::decay_t<F>> &&
!std::is_constructible<T, F>::value &&
is_explicitly_convertible<const F, T>::value> * =
nullptr)
static T
value(
const F &f,
- std::enable_if_t<!std::is_same_v<typename std::decay<T>::type,
- typename std::decay<F>::type> &&
+ std::enable_if_t<!std::is_same_v<std::decay_t<T>, std::decay_t<F>> &&
!std::is_constructible<T, F>::value &&
!is_explicitly_convertible<const F, T>::value &&
Differentiation::AD::is_ad_number<F>::value> * = nullptr)
struct is_list_compatible
{
static constexpr bool const value =
- internal::is_list_compatible<typename std::decay<T>::type>::value;
+ internal::is_list_compatible<std::decay_t<T>>::value;
};
template <typename T>
struct is_map_compatible
{
static constexpr bool const value =
- internal::is_map_compatible<typename std::decay<T>::type>::value;
+ internal::is_map_compatible<std::decay_t<T>>::value;
};
namespace internal
struct ProductType
{
using type =
- typename internal::ProductTypeImpl<typename std::decay<T>::type,
- typename std::decay<U>::type>::type;
+ typename internal::ProductTypeImpl<std::decay_t<T>, std::decay_t<U>>::type;
};
namespace internal
*/
template <typename NumberType>
struct is_ad_number
- : internal::HasRequiredADInfo<
- ADNumberTraits<typename std::decay<NumberType>::type>>
+ : internal::HasRequiredADInfo<ADNumberTraits<std::decay_t<NumberType>>>
{};
template <typename NumberType>
struct is_taped_ad_number<
NumberType,
- std::enable_if_t<
- ADNumberTraits<typename std::decay<NumberType>::type>::is_taped>>
+ std::enable_if_t<ADNumberTraits<std::decay_t<NumberType>>::is_taped>>
: std::true_type
{};
template <typename NumberType>
struct is_tapeless_ad_number<
NumberType,
- std::enable_if_t<
- ADNumberTraits<typename std::decay<NumberType>::type>::is_tapeless>>
+ std::enable_if_t<ADNumberTraits<std::decay_t<NumberType>>::is_tapeless>>
: std::true_type
{};
struct is_real_valued_ad_number<
NumberType,
std::enable_if_t<
- ADNumberTraits<typename std::decay<NumberType>::type>::is_real_valued>>
+ ADNumberTraits<std::decay_t<NumberType>>::is_real_valued>>
: std::true_type
{};
template <typename NumberType>
struct is_complex_valued_ad_number<
NumberType,
- std::enable_if_t<ADNumberTraits<
- typename std::decay<NumberType>::type>::is_complex_valued>>
+ std::enable_if_t<
+ ADNumberTraits<std::decay_t<NumberType>>::is_complex_valued>>
: std::true_type
{};
template <typename NumberType>
struct is_adolc_taped_number<
NumberType,
- std::enable_if_t<ADNumberTraits<typename std::decay<NumberType>::type>::
- type_code == NumberTypes::adolc_taped>>
- : std::true_type
+ std::enable_if_t<ADNumberTraits<std::decay_t<NumberType>>::type_code ==
+ NumberTypes::adolc_taped>> : std::true_type
{};
template <typename NumberType>
struct is_adolc_tapeless_number<
NumberType,
- std::enable_if_t<ADNumberTraits<typename std::decay<NumberType>::type>::
- type_code == NumberTypes::adolc_tapeless>>
- : std::true_type
+ std::enable_if_t<ADNumberTraits<std::decay_t<NumberType>>::type_code ==
+ NumberTypes::adolc_tapeless>> : std::true_type
{};
* templates used in the above specializations.
*/
template <typename Number>
- struct SacadoNumberInfo<Number,
- std::enable_if_t<std::is_arithmetic<
- typename std::decay<Number>::type>::value>>
+ struct SacadoNumberInfo<
+ Number,
+ std::enable_if_t<std::is_arithmetic<std::decay_t<Number>>::value>>
{
static const unsigned int n_supported_derivative_levels = 0;
};
template <typename NumberType>
struct is_sacado_dfad_number<
NumberType,
- std::enable_if_t<
- ADNumberTraits<typename std::decay<NumberType>::type>::type_code ==
- NumberTypes::sacado_dfad ||
- ADNumberTraits<typename std::decay<NumberType>::type>::type_code ==
- NumberTypes::sacado_dfad_dfad>> : std::true_type
+ std::enable_if_t<ADNumberTraits<std::decay_t<NumberType>>::type_code ==
+ NumberTypes::sacado_dfad ||
+ ADNumberTraits<std::decay_t<NumberType>>::type_code ==
+ NumberTypes::sacado_dfad_dfad>> : std::true_type
{};
template <typename NumberType>
struct is_sacado_rad_number<
NumberType,
- std::enable_if_t<
- ADNumberTraits<typename std::decay<NumberType>::type>::type_code ==
- NumberTypes::sacado_rad ||
- ADNumberTraits<typename std::decay<NumberType>::type>::type_code ==
- NumberTypes::sacado_rad_dfad>> : std::true_type
+ std::enable_if_t<ADNumberTraits<std::decay_t<NumberType>>::type_code ==
+ NumberTypes::sacado_rad ||
+ ADNumberTraits<std::decay_t<NumberType>>::type_code ==
+ NumberTypes::sacado_rad_dfad>> : std::true_type
{};
if (accessor.dof_handler->hp_capability_enabled == false)
return DoFHandler<dim, spacedim>::default_fe_index;
- Assert(
- accessor.dof_handler != nullptr,
- (typename std::decay<decltype(accessor)>::type::ExcInvalidObject()));
+ Assert(accessor.dof_handler != nullptr,
+ (typename std::decay_t<decltype(accessor)>::ExcInvalidObject()));
Assert(static_cast<unsigned int>(accessor.level()) <
accessor.dof_handler->hp_cell_future_fe_indices.size(),
ExcMessage("DoFHandler not initialized"));
return;
}
- Assert(
- accessor.dof_handler != nullptr,
- (typename std::decay<decltype(accessor)>::type::ExcInvalidObject()));
+ Assert(accessor.dof_handler != nullptr,
+ (typename std::decay_t<decltype(accessor)>::ExcInvalidObject()));
Assert(static_cast<unsigned int>(accessor.level()) <
accessor.dof_handler->hp_cell_future_fe_indices.size(),
ExcMessage("DoFHandler not initialized"));
if (accessor.dof_handler->hp_capability_enabled == false)
return DoFHandler<dim, spacedim>::default_fe_index;
- Assert(
- accessor.dof_handler != nullptr,
- (typename std::decay<decltype(accessor)>::type::ExcInvalidObject()));
+ Assert(accessor.dof_handler != nullptr,
+ (typename std::decay_t<decltype(accessor)>::ExcInvalidObject()));
Assert(static_cast<unsigned int>(accessor.level()) <
accessor.dof_handler->hp_cell_future_fe_indices.size(),
ExcMessage("DoFHandler not initialized"));
return;
}
- Assert(
- accessor.dof_handler != nullptr,
- (typename std::decay<decltype(accessor)>::type::ExcInvalidObject()));
+ Assert(accessor.dof_handler != nullptr,
+ (typename std::decay_t<decltype(accessor)>::ExcInvalidObject()));
Assert(static_cast<unsigned int>(accessor.level()) <
accessor.dof_handler->hp_cell_future_fe_indices.size(),
ExcMessage("DoFHandler not initialized"));
if (accessor.dof_handler->hp_capability_enabled == false)
return false;
- Assert(
- accessor.dof_handler != nullptr,
- (typename std::decay<decltype(accessor)>::type::ExcInvalidObject()));
+ Assert(accessor.dof_handler != nullptr,
+ (typename std::decay_t<decltype(accessor)>::ExcInvalidObject()));
Assert(static_cast<unsigned int>(accessor.level()) <
accessor.dof_handler->hp_cell_future_fe_indices.size(),
ExcMessage("DoFHandler not initialized"));
if (accessor.dof_handler->hp_capability_enabled == false)
return;
- Assert(
- accessor.dof_handler != nullptr,
- (typename std::decay<decltype(accessor)>::type::ExcInvalidObject()));
+ Assert(accessor.dof_handler != nullptr,
+ (typename std::decay_t<decltype(accessor)>::ExcInvalidObject()));
Assert(static_cast<unsigned int>(accessor.level()) <
accessor.dof_handler->hp_cell_future_fe_indices.size(),
ExcMessage("DoFHandler not initialized"));
OutputVector & global_destination) const
{
Assert(this->dof_handler != nullptr,
- (typename std::decay<decltype(*this)>::type::ExcInvalidObject()));
+ (typename std::decay_t<decltype(*this)>::ExcInvalidObject()));
Assert(static_cast<unsigned int>(local_source_end - local_source_begin) ==
this->get_fe().n_dofs_per_cell(),
- (typename std::decay<decltype(*this)>::type::ExcVectorDoesNotMatch()));
+ (typename std::decay_t<decltype(*this)>::ExcVectorDoesNotMatch()));
Assert(this->dof_handler->n_dofs() == global_destination.size(),
- (typename std::decay<decltype(*this)>::type::ExcVectorDoesNotMatch()));
+ (typename std::decay_t<decltype(*this)>::ExcVectorDoesNotMatch()));
Assert(!this->has_children(), ExcMessage("Cell must be active"));
OutputVector & global_destination) const
{
Assert(this->dof_handler != nullptr,
- (typename std::decay<decltype(*this)>::type::ExcInvalidObject()));
+ (typename std::decay_t<decltype(*this)>::ExcInvalidObject()));
Assert(local_source_end - local_source_begin ==
this->get_fe().n_dofs_per_cell(),
- (typename std::decay<decltype(*this)>::type::ExcVectorDoesNotMatch()));
+ (typename std::decay_t<decltype(*this)>::ExcVectorDoesNotMatch()));
Assert(this->dof_handler->n_dofs() == global_destination.size(),
- (typename std::decay<decltype(*this)>::type::ExcVectorDoesNotMatch()));
+ (typename std::decay_t<decltype(*this)>::ExcVectorDoesNotMatch()));
Assert(!this->has_children(), ExcMessage("Cell must be active."));
OutputMatrix & global_destination) const
{
Assert(this->dof_handler != nullptr,
- (typename std::decay<decltype(*this)>::type::ExcInvalidObject()));
+ (typename std::decay_t<decltype(*this)>::ExcInvalidObject()));
Assert(local_source.m() == this->get_fe().n_dofs_per_cell(),
- (typename std::decay<decltype(*this)>::type::ExcMatrixDoesNotMatch()));
+ (typename std::decay_t<decltype(*this)>::ExcMatrixDoesNotMatch()));
Assert(local_source.n() == this->get_fe().n_dofs_per_cell(),
- (typename std::decay<decltype(*this)>::type::ExcMatrixDoesNotMatch()));
+ (typename std::decay_t<decltype(*this)>::ExcMatrixDoesNotMatch()));
Assert(this->dof_handler->n_dofs() == global_destination.m(),
- (typename std::decay<decltype(*this)>::type::ExcMatrixDoesNotMatch()));
+ (typename std::decay_t<decltype(*this)>::ExcMatrixDoesNotMatch()));
Assert(this->dof_handler->n_dofs() == global_destination.n(),
- (typename std::decay<decltype(*this)>::type::ExcMatrixDoesNotMatch()));
+ (typename std::decay_t<decltype(*this)>::ExcMatrixDoesNotMatch()));
Assert(!this->has_children(), ExcMessage("Cell must be active."));
OutputVector & global_vector) const
{
Assert(this->dof_handler != nullptr,
- (typename std::decay<decltype(*this)>::type::ExcInvalidObject()));
+ (typename std::decay_t<decltype(*this)>::ExcInvalidObject()));
Assert(local_matrix.m() == this->get_fe().n_dofs_per_cell(),
- (typename std::decay<decltype(*this)>::type::ExcMatrixDoesNotMatch()));
+ (typename std::decay_t<decltype(*this)>::ExcMatrixDoesNotMatch()));
Assert(local_matrix.n() == this->get_fe().n_dofs_per_cell(),
- (typename std::decay<decltype(*this)>::type::ExcVectorDoesNotMatch()));
+ (typename std::decay_t<decltype(*this)>::ExcVectorDoesNotMatch()));
Assert(this->dof_handler->n_dofs() == global_matrix.m(),
- (typename std::decay<decltype(*this)>::type::ExcMatrixDoesNotMatch()));
+ (typename std::decay_t<decltype(*this)>::ExcMatrixDoesNotMatch()));
Assert(this->dof_handler->n_dofs() == global_matrix.n(),
- (typename std::decay<decltype(*this)>::type::ExcMatrixDoesNotMatch()));
+ (typename std::decay_t<decltype(*this)>::ExcMatrixDoesNotMatch()));
Assert(local_vector.size() == this->get_fe().n_dofs_per_cell(),
- (typename std::decay<decltype(*this)>::type::ExcVectorDoesNotMatch()));
+ (typename std::decay_t<decltype(*this)>::ExcVectorDoesNotMatch()));
Assert(this->dof_handler->n_dofs() == global_vector.size(),
- (typename std::decay<decltype(*this)>::type::ExcVectorDoesNotMatch()));
+ (typename std::decay_t<decltype(*this)>::ExcVectorDoesNotMatch()));
Assert(!this->has_children(), ExcMessage("Cell must be active."));
template <
class... FEPairs,
typename = enable_if_all_t<
- (std::is_same_v<typename std::decay<FEPairs>::type,
+ (std::is_same_v<std::decay_t<FEPairs>,
std::pair<std::unique_ptr<FiniteElement<dim, spacedim>>,
unsigned int>> ||
std::is_base_of_v<FiniteElement<dim, spacedim>,
- typename std::decay<FEPairs>::type>)...>>
+ std::decay_t<FEPairs>>)...>>
FESystem(FEPairs &&...fe_pairs);
/**
const auto *new_values = target_vector.getData().get();
const auto size = target_vector.getLocalLength();
- using size_type = typename std::decay<decltype(size)>::type;
+ using size_type = std::decay_t<decltype(size)>;
Assert(size == 0 || values != nullptr, ExcInternalError("Export failed."));
AssertDimension(size, stored_elements.n_elements());
TrilinosWrappers::types::int_type *col_index_ptr =
reinterpret_cast<TrilinosWrappers::types::int_type *>(
- const_cast<typename std::decay<decltype(*begin)>::type *>(&*begin));
+ const_cast<std::decay_t<decltype(*begin)> *>(&*begin));
// Check at least for the first index that the conversion actually works
AssertDimension(*col_index_ptr, *begin);
TrilinosWrappers::types::int_type trilinos_row_index = row;
// This commented out code block identifies that the filtered iterator
// is of a different type to that returned by cell->neighbor()
//
- // using C1 = typename std::decay<decltype(cell)>::type;
- // using C2 = typename std::decay<decltype(cell_neighbor)>::type;
+ // using C1 = std::decay_t<decltype(cell)>;
+ // using C2 = std::decay_t<decltype(cell_neighbor)>;
// static_assert(std::is_same_v<C1, C2>,
// "Cell iterator types are not identical.");
const Vector<double> vA = Notation::Kelvin::to_vector(A);
const FullMatrix<double> mA = Notation::Kelvin::to_matrix(A);
- using InpType = typename std::decay<decltype(A)>::type;
+ using InpType = std::decay_t<decltype(A)>;
const auto vA_conv = Notation::Kelvin::to_tensor<InpType>(vA);
const auto mA_conv = Notation::Kelvin::to_tensor<InpType>(mA);
const Vector<double> vA = Notation::Kelvin::to_vector(A);
const FullMatrix<double> mA = Notation::Kelvin::to_matrix(A);
- using InpType = typename std::decay<decltype(A)>::type;
+ using InpType = std::decay_t<decltype(A)>;
// Here and below we need both types to work around a problem present in GCC
// 5.4.0 in which the compiler does not correctly handle SFINAE with
// static_assert(). This was fixed by GCC 9.
const Vector<double> vA = Notation::Kelvin::to_vector(A);
- using InpType = typename std::decay<decltype(A)>::type;
+ using InpType = std::decay_t<decltype(A)>;
const auto vA_conv = Notation::Kelvin::to_tensor<InpType, double>(vA);
Assert((vA_conv - A).norm() < 1e-12,
const Vector<double> vA = Notation::Kelvin::to_vector(A);
const FullMatrix<double> mA = Notation::Kelvin::to_matrix(A);
- using InpType = typename std::decay<decltype(A)>::type;
+ using InpType = std::decay_t<decltype(A)>;
const auto vA_conv = Notation::Kelvin::to_tensor<InpType, double>(vA);
const auto mA_conv = Notation::Kelvin::to_tensor<InpType, double>(mA);
const Vector<double> vA = Notation::Kelvin::to_vector(A);
const FullMatrix<double> mA = Notation::Kelvin::to_matrix(A);
- using InpType = typename std::decay<decltype(A)>::type;
+ using InpType = std::decay_t<decltype(A)>;
const auto vA_conv = Notation::Kelvin::to_tensor<InpType, double>(vA);
const auto mA_conv = Notation::Kelvin::to_tensor<InpType, double>(mA);
const FullMatrix<double> mA =
Notation::Kelvin::to_matrix<dim, Tensor<1, dim>, Tensor<2, dim>>(A);
- using InpType = typename std::decay<decltype(A)>::type;
+ using InpType = std::decay_t<decltype(A)>;
const auto mA_conv = Notation::Kelvin::to_tensor<InpType, double>(mA);
Assert((mA_conv - A).norm() < 1e-12,
const FullMatrix<double> mA =
Notation::Kelvin::to_matrix<dim, Tensor<2, dim>, Tensor<1, dim>>(A);
- using InpType = typename std::decay<decltype(A)>::type;
+ using InpType = std::decay_t<decltype(A)>;
const auto mA_conv = Notation::Kelvin::to_tensor<InpType, double>(mA);
Assert((mA_conv - A).norm() < 1e-12,
Notation::Kelvin::to_matrix<dim, SymmetricTensor<2, dim>, Tensor<1, dim>>(
A);
- using InpType = typename std::decay<decltype(A)>::type;
+ using InpType = std::decay_t<decltype(A)>;
const auto mA_conv = Notation::Kelvin::to_tensor<InpType, double>(mA);
Assert((mA_conv - A).norm() < 1e-12,
Notation::Kelvin::to_matrix<dim, Tensor<1, dim>, SymmetricTensor<2, dim>>(
A);
- using InpType = typename std::decay<decltype(A)>::type;
+ using InpType = std::decay_t<decltype(A)>;
const auto mA_conv = Notation::Kelvin::to_tensor<InpType, double>(mA);
Assert((mA_conv - A).norm() < 1e-12,
const FullMatrix<double> mA = Notation::Kelvin::to_matrix(A);
- using InpType = typename std::decay<decltype(A)>::type;
+ using InpType = std::decay_t<decltype(A)>;
const auto mA_conv = Notation::Kelvin::to_tensor<InpType, double>(mA);
Assert((mA_conv - A).norm() < 1e-12,
const FullMatrix<double> mA = Notation::Kelvin::to_matrix(A);
- using InpType = typename std::decay<decltype(A)>::type;
+ using InpType = std::decay_t<decltype(A)>;
const auto mA_conv = Notation::Kelvin::to_tensor<InpType, double>(mA);
Assert((mA_conv - A).norm() < 1e-12,
Vector<double> vB(mC.m());
mC.vmult(vB, vA);
- using InpVecType = typename std::decay<decltype(A)>::type;
- using ResVecType = typename std::decay<decltype(B)>::type;
- using InpMatType = typename std::decay<decltype(C)>::type;
+ using InpVecType = std::decay_t<decltype(A)>;
+ using ResVecType = std::decay_t<decltype(B)>;
+ using InpMatType = std::decay_t<decltype(C)>;
// Here and below we need both types to work around a problem present in GCC
// 5.4.0 in which the compiler does not correctly handle SFINAE with
// static_assert(). This was fixed by GCC 9.
Vector<double> vB(mC.m());
mC.vmult(vB, vA);
- using InpVecType = typename std::decay<decltype(A)>::type;
- using ResVecType = typename std::decay<decltype(B)>::type;
- using InpMatType = typename std::decay<decltype(C)>::type;
+ using InpVecType = std::decay_t<decltype(A)>;
+ using ResVecType = std::decay_t<decltype(B)>;
+ using InpMatType = std::decay_t<decltype(C)>;
const auto A_conv = Notation::Kelvin::to_tensor<InpVecType, double>(vA);
const auto B_conv = Notation::Kelvin::to_tensor<ResVecType, double>(vB);
const auto C_conv = Notation::Kelvin::to_tensor<InpMatType, double>(mC);
Vector<double> vB(mC.m());
mC.vmult(vB, vA);
- using InpVecType = typename std::decay<decltype(A)>::type;
- using ResVecType = typename std::decay<decltype(B)>::type;
- using InpMatType = typename std::decay<decltype(C)>::type;
+ using InpVecType = std::decay_t<decltype(A)>;
+ using ResVecType = std::decay_t<decltype(B)>;
+ using InpMatType = std::decay_t<decltype(C)>;
const auto A_conv = Notation::Kelvin::to_tensor<InpVecType, double>(vA);
const auto B_conv = Notation::Kelvin::to_tensor<ResVecType, double>(vB);
const auto C_conv = Notation::Kelvin::to_tensor<InpMatType, double>(mC);
Vector<double> vB(mC.m());
mC.vmult(vB, vA);
- using InpVecType = typename std::decay<decltype(A)>::type;
- using ResVecType = typename std::decay<decltype(B)>::type;
- using InpMatType = typename std::decay<decltype(C)>::type;
+ using InpVecType = std::decay_t<decltype(A)>;
+ using ResVecType = std::decay_t<decltype(B)>;
+ using InpMatType = std::decay_t<decltype(C)>;
const auto A_conv = Notation::Kelvin::to_tensor<InpVecType, double>(vA);
const auto B_conv = Notation::Kelvin::to_tensor<ResVecType, double>(vB);
const auto C_conv = Notation::Kelvin::to_tensor<InpMatType, double>(mC);
Vector<double> vB(mC.m());
mC.vmult(vB, vA);
- using InpVecType = typename std::decay<decltype(A)>::type;
- using ResVecType = typename std::decay<decltype(B)>::type;
- using InpMatType = typename std::decay<decltype(C)>::type;
+ using InpVecType = std::decay_t<decltype(A)>;
+ using ResVecType = std::decay_t<decltype(B)>;
+ using InpMatType = std::decay_t<decltype(C)>;
const auto A_conv = Notation::Kelvin::to_tensor<InpVecType, double>(vA);
const auto B_conv = Notation::Kelvin::to_tensor<ResVecType, double>(vB);
const auto C_conv = Notation::Kelvin::to_tensor<InpMatType, double>(mC);
Vector<double> vB(mC.m());
mC.vmult(vB, vA);
- using InpVecType = typename std::decay<decltype(A)>::type;
- using ResVecType = typename std::decay<decltype(B)>::type;
- using InpMatType = typename std::decay<decltype(C)>::type;
+ using InpVecType = std::decay_t<decltype(A)>;
+ using ResVecType = std::decay_t<decltype(B)>;
+ using InpMatType = std::decay_t<decltype(C)>;
const auto A_conv = Notation::Kelvin::to_tensor<InpVecType, double>(vA);
const auto B_conv = Notation::Kelvin::to_tensor<ResVecType, double>(vB);
const auto C_conv = Notation::Kelvin::to_tensor<InpMatType, double>(mC);
Vector<double> vB(mC.m());
mC.vmult(vB, vA);
- using InpVecType = typename std::decay<decltype(A)>::type;
- using ResVecType = typename std::decay<decltype(B)>::type;
- using InpMatType = typename std::decay<decltype(C)>::type;
+ using InpVecType = std::decay_t<decltype(A)>;
+ using ResVecType = std::decay_t<decltype(B)>;
+ using InpMatType = std::decay_t<decltype(C)>;
const auto A_conv = Notation::Kelvin::to_tensor<InpVecType, double>(vA);
const auto B_conv = Notation::Kelvin::to_tensor<ResVecType, double>(vB);
const auto C_conv = Notation::Kelvin::to_tensor<InpMatType, double>(mC);
Vector<double> vB(mC.n()); // Note result size
mC.Tvmult(vB, vA); // Note transpose vmult
- using InpVecType = typename std::decay<decltype(A)>::type;
- using ResVecType = typename std::decay<decltype(B)>::type;
- using InpMatType = typename std::decay<decltype(C)>::type;
+ using InpVecType = std::decay_t<decltype(A)>;
+ using ResVecType = std::decay_t<decltype(B)>;
+ using InpMatType = std::decay_t<decltype(C)>;
const auto A_conv = Notation::Kelvin::to_tensor<InpVecType, double>(vA);
const auto B_conv = Notation::Kelvin::to_tensor<ResVecType, double>(vB);
const auto C_conv = Notation::Kelvin::to_tensor<InpMatType, double>(mC);
Vector<double> vB(mC.m()); // Note result size
mC.vmult(vB, vA); // Note transpose vmult
- using InpVecType = typename std::decay<decltype(A)>::type;
- using ResVecType = typename std::decay<decltype(B)>::type;
- using InpMatType = typename std::decay<decltype(C)>::type;
+ using InpVecType = std::decay_t<decltype(A)>;
+ using ResVecType = std::decay_t<decltype(B)>;
+ using InpMatType = std::decay_t<decltype(C)>;
const auto A_conv = Notation::Kelvin::to_tensor<InpVecType, double>(vA);
const auto B_conv = Notation::Kelvin::to_tensor<ResVecType, double>(vB);
const auto C_conv = Notation::Kelvin::to_tensor<InpMatType, double>(mC);
Vector<double> vB(mC.n()); // Note result size
mC.Tvmult(vB, vA); // Note transpose vmult
- using InpVecType = typename std::decay<decltype(A)>::type;
- using ResVecType = typename std::decay<decltype(B)>::type;
- using InpMatType = typename std::decay<decltype(C)>::type;
+ using InpVecType = std::decay_t<decltype(A)>;
+ using ResVecType = std::decay_t<decltype(B)>;
+ using InpMatType = std::decay_t<decltype(C)>;
const auto A_conv = Notation::Kelvin::to_tensor<InpVecType, double>(vA);
const auto B_conv = Notation::Kelvin::to_tensor<ResVecType, double>(vB);
const auto C_conv = Notation::Kelvin::to_tensor<InpMatType, double>(mC);
Vector<double> vB(mC.m()); // Note result size
mC.vmult(vB, vA); // Note transpose vmult
- using InpVecType = typename std::decay<decltype(A)>::type;
- using ResVecType = typename std::decay<decltype(B)>::type;
- using InpMatType = typename std::decay<decltype(C)>::type;
+ using InpVecType = std::decay_t<decltype(A)>;
+ using ResVecType = std::decay_t<decltype(B)>;
+ using InpMatType = std::decay_t<decltype(C)>;
const auto A_conv = Notation::Kelvin::to_tensor<InpVecType, double>(vA);
const auto B_conv = Notation::Kelvin::to_tensor<ResVecType, double>(vB);
const auto C_conv = Notation::Kelvin::to_tensor<InpMatType, double>(mC);