C++ attribute: nodiscard (since C++17)

From cppreference.com
< cpp‎ | language‎ | attributes
 
 
 
 
Attributes
(C++14)
nodiscard
(C++17)
(C++20)(C++20)
(C++20)(C++20)(C++20)
 

If a function declared nodiscard or a function returning an enumeration or class declared nodiscard by value is called from a discarded-value expression other than a cast to void, the compiler is encouraged to issue a warning.

Syntax

[[nodiscard]]

Explanation

Appears in a function declaration, enumeration declaration, or class declaration.

If a function declared nodiscard or a function returning an enumeration or class declared nodiscard by value is called from a discarded-value expression other than a cast to void, the compiler is encouraged to issue a warning.

Example

struct [[nodiscard]] error_info { };
error_info enable_missile_safety_mode();
void launch_missiles();
void test_missiles() {
   enable_missile_safety_mode(); // compiler may warn on discarding a nodiscard value
   launch_missiles();
}
error_info& foo();
void f1() {
    foo(); // nodiscard type is not returned by value, no warning
}


Standard library

The following standard functions are declared with nodiscard attribute:

Allocation functions
allocation functions
(function)
allocates uninitialized storage
(public member function of std::allocator<T>)
[static]
allocates uninitialized storage using the allocator
(public static member function of std::allocator_traits<Alloc>)
allocates memory
(public member function of std::pmr::memory_resource)
Allocate memory
(public member function of std::pmr::polymorphic_allocator<T>)
allocates uninitialized storage using the outer allocator
(public member function of std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>)
Indirect access
(C++17)
pointer optimization barrier
(function template)
informs the compiler that a pointer is aligned
(function template)
Emptiness-checking functions
(C++17)
checks whether the container is empty
(function template)
checks whether the node handle is empty
(public member function of node handle)
checks whether the container is empty
(public member function of std::array<T,N>)
checks whether the string is empty
(public member function of std::basic_string<CharT,Traits,Allocator>)
checks whether the view is empty
(public member function of std::basic_string_view<CharT,Traits>)
checks whether the container is empty
(public member function of std::deque<T,Allocator>)
checks whether the container is empty
(public member function of std::forward_list<T,Allocator>)
checks whether the container is empty
(public member function of std::list<T,Allocator>)
checks whether the container is empty
(public member function of std::map<Key,T,Compare,Allocator>)
checks whether the match was successful
(public member function of std::match_results<BidirIt,Alloc>)
checks whether the container is empty
(public member function of std::multimap<Key,T,Compare,Allocator>)
checks whether the container is empty
(public member function of std::multiset<Key,Compare,Allocator>)
checks whether the underlying container is empty
(public member function of std::priority_queue<T,Container,Compare>)
checks whether the underlying container is empty
(public member function of std::queue<T,Container>)
checks whether the container is empty
(public member function of std::set<Key,Compare,Allocator>)
checks if the sequence is empty
(public member function of std::span<T,Extent>)
checks whether the underlying container is empty
(public member function of std::stack<T,Container>)
checks whether the container is empty
(public member function of std::unordered_map<Key,T,Hash,KeyEqual,Allocator>)
checks whether the container is empty
(public member function of std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator>)
checks whether the container is empty
(public member function of std::unordered_multiset<Key,Hash,KeyEqual,Allocator>)
checks whether the container is empty
(public member function of std::unordered_set<Key,Hash,KeyEqual,Allocator>)
checks whether the container is empty
(public member function of std::vector<T,Allocator>)
checks if the path is empty
(public member function of std::filesystem::path)
Miscellaneous
(C++11)
runs a function asynchronously (potentially in a new thread) and returns a std::future that will hold the result
(function template)