---
name: "typetrait"
section: "3bobcat"
platform: "linux"
package: "libbobcat-dev"
version: "6.07.01-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/typetrait"
---

# typetrait(3bobcat)

Type trait class

## NAME

FBB::TypeTrait - Type trait class

## SYNOPSIS

**#include \<bobcat/typetrait\>**\

## DESCRIPTION

**FBB::TypeTrait** is a traits class. It does not define any member functions or data members, but merely types. It can be used to determine the basic type and other characteristics of (const) plain, (const) pointer or (const) reference types. It was designed after Alexandrescu’s (2001) *TypeTraits* template class.

The **FBB::LpromotesR** class template is used to determine, compile-time, whether its second (right-hand side) template type can be promoted to its first (left-hand side) template type.

The **FBB::Use** class template expects two typenames *LHS* and *RHS* and defines *typename Use\<LHS, RHS\>::type* as *LHS* if *RHS* can be promoted to *LHS* or it defines *typename Use\<LHS, RHS\>::type* as *RHS*.

## NAMESPACE

**FBB**\
 All constructors, members, operators and manipulators, mentioned in this man-page, are defined in the namespace **FBB**.

## INHERITS FROM

\-

## TypeTrait\<TYPE\>

**TYPE** is the template type parameter whose characteristics must be determined.

*TypeTrait\<TYPE\>* defines the type *Plain*: the plain type (the type without const, pointer, reference type indication) of any const or non-const plain, pointer, lvalue- or rvalue-reference type.

*TypeTrait\<TYPE\>* defines the following *bool* values:

- o

  *isClass*: *true* if the template type argument represents a class (struct) type, *false* otherwise.

- o

  *isConst*: *true* if the template type argument represents a const type, *false* otherwise.

- o

  *isPointer*: *true* if the template type argument represents a pointer type, *false* otherwise.

- o

  *isR\_Ref*: *true* if the template type argument represents a rvalue reference type, *false* otherwise.

- o

  *isRef*: *true* if the template type argument represents an lvalue reference type, *false* otherwise.

## LpromotesR\<LeftType, RightType\>

*LpromotesR\<LeftType, RightType\>* defines the enum constant *yes* as 1 if an *RightType* argument can be promoted to *LeftType* value or object. The enum value *yes* is defined as 0 if no such constructor is available or if such a constructor is defined using the *explicit* keyword.

## EXAMPLES

Here is an example using *LpromotesR*:

```
    int main()
    {
        cout << "string promotes char const *: " <<
                LpromotesR<string, char const *>::yes << ’\n’;  // 1
        cout << "string promotes string " <<
                LpromotesR<string, string>::yes << ’\n’;        // 1
        cout << "char const * promotes string " <<
                LpromotesR<char const *, string>::yes << ’\n’;  // 0
    }
```

## FILES

*bobcat/typetrait* - defines the class interface

## SEE ALSO

[**bobcat**(7)](/bobcat/7.md)\
 Alexandrescu A. (2001) **Modern C++ Design**, Addison-Wesley, Boston.

## BUGS

None Reported.

## BOBCAT PROJECT FILES

- o

  *https://fbb-git.gitlab.io/bobcat/*: gitlab project page;

Debian Bobcat project files:

- o

  *libbobcat6*: debian package containing the shared library, changelog and copyright note;

- o

  *libbobcat-dev*: debian package containing the static library, headers, manual pages, and developer info;

## BOBCAT

Bobcat is an acronym of \`Brokken’s Own Base Classes And Templates’.

## COPYRIGHT

This is free software, distributed under the terms of the GNU General Public License (GPL).

## AUTHOR

Frank B. Brokken (**f.b.brokken@rug.nl**).
