25 Aralık 2017 Pazartesi

std::remove_reference

Giriş
std::remove_reference ve std::decay benzer işi yaparlar ancak aralarında bir fark bulunur. std::remove_reference const, volatile gibi qualifier'ları muhafaza eder. std::decay ise etmez

Örnek
Şöyle yaparız.
#include <iostream> // std::cout
#include <type_traits> // std::is_same

template<class T1, class T2>
void print_is_same() {
  std::cout << std::is_same<T1, T2>() << '\n';
}

int main() {
  std::cout << std::boolalpha;

  print_is_same<int, int>(); //true
  print_is_same<int, int &>(); //false
  print_is_same<int, int &&>(); //false

  print_is_same<int, std::remove_reference<int>::type>(); //true
  print_is_same<int, std::remove_reference<int &>::type>(); //true
  print_is_same<int, std::remove_reference<int &&>::type>(); //true
}
Örnek
Şöyle yaparız.
#include <type_traits>

int main()
{
    static_assert(std::is_same_v<
        std::decay_t<const int&>, 
        std::remove_reference_t<const int&>
    >); // int != const int
}

Hiç yorum yok:

Yorum Gönder