Used to indicate when it is an error to ignore a return value from a function, should be used extensively, any non-mutating(getter/accessor/const) function should be [[nodiscard]]
noexcept notifies the user(and compiler) that a function may not throw an exception. If an exception is thrown from that function, terminate MUST be called.