/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011 OpenFOAM Foundation
Copyright (C) 2023 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM 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 General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see .
Description
\*---------------------------------------------------------------------------*/
#include "IOstreams.H"
#include "pTraits.H"
#include "contiguous.H"
#include "boolVector.H" // A FixedList pretending to be a vector
#include "vector.H"
#include "tensor.H"
#include "complex.H"
#include "uLabel.H"
#include "Switch.H"
#include
using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program:
//- Test if Type has typeName member
template
struct has_typeName : std::false_type {};
//- Test if Type has typeName member
template
struct has_typeName::typeName)>>
:
std::true_type
{};
template
typename std::enable_if::value, void>::type
printTypeName()
{
Info<< pTraits::typeName;
}
template
typename std::enable_if::value, void>::type
printTypeName()
{
Info<< typeid(T).name();
}
template
struct has_zero_one : std::false_type {};
template
struct has_zero_one
<
T,
stdFoam::void_t::zero), decltype(pTraits::one)>
> : std::true_type {};
template
typename std::enable_if::value, void>::type
printMinMaxRange()
{
Info<< " zero=" << pTraits::zero
<< " one=" << pTraits::one;
}
template
typename std::enable_if::value, void>::type
printMinMaxRange()
{}
template
void printTraits()
{
printTypeName();
printMinMaxRange();
Info<< " integral=" << std::is_integral::value
<< " floating=" << std::is_floating_point::value
<< " rank=" << pTraits_rank::value
<< " nComponents=" << pTraits_nComponents::value
<< " vector-space=" << Switch::name(is_vectorspace::value)
<< " is_label=" << Switch::name(is_contiguous_label::value)
<< " is_scalar=" << Switch::name(is_contiguous_scalar::value)
<< " cmptType=" << typeid(typename pTraits_cmptType::type).name()
<< endl;
}
template
void printTraits(const pTraits& p)
{
Info<< p.typeName << " == " << p << endl;
}
template
void printDecltype()
{
Info<< "cmptType : " << typeid(T).name() << nl;
}
#pragma GCC diagnostic warning "-Wmaybe-uninitialized"
#pragma GCC diagnostic warning "-Wuninitialized"
int main()
{
printTraits();
printTraits