/*---------------------------------------------------------------------------*\ ========= | \\ / 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