std::ignore

Header: <tuple>

  1. An object such that any value can be assigned to it with no effect.

# Declarations

const /*ignore-type*/ ignore;

(since C++11) (until C++14)

constexpr /*ignore-type*/ ignore;

(since C++14) (inline since c++17)

struct /*ignore-type*/
{
template< class T >
const /*ignore-type*/& operator=( const T& ) const noexcept
{
return *this;
}
};

(since C++11) (until C++14) (exposition only*)

struct /*ignore-type*/
{
template< class T >
constexpr const /*ignore-type*/& operator=( const T& ) const noexcept
{
return *this;
}
};

(since C++14) (exposition only*)

# Notes

A void expression or a volatile bit-field value cannot be assigned to std::ignore.

std::ignore is intended for use with std::tie when unpacking a std::tuple, as a placeholder for the arguments that are not used, but can be used for any unwanted assignment.

Some code guides recommend using std::ignore to avoid warnings from unused return values of [[nodiscard]] functions, even though an assignment isn’t required.

For ignoring values not requiring assignment, one may cast to void. For variables that have names, but whose value is unused, one may cast those to void or declare those variables with [[maybe_unused]].

# Example

#include <iostream>
#include <set>
#include <string>
#include <tuple>
 
[[nodiscard]] int dontIgnoreMe()
{
    return 42;
}
 
int main()
{
    std::ignore = dontIgnoreMe();
 
    std::set<std::string> set_of_str;
    if (bool inserted{false};
        std::tie(std::ignore, inserted) = set_of_str.insert("Test"),
        inserted)
        std::cout << "Value was inserted successfully.\n";
}

# Defect reports

DRApplied toBehavior as publishedCorrect behavior
LWG 2773C++14std::tuple was made constexpr but std::ignore was not yetmade constexpr
P2968R2C++11the behavior of std::ignore outside of std::tie was not formally specifiedmade fully specified

# See also