मैं एक प्रकार की सामग्री तक पहुँचने का प्रयास कर रहा हूँ। मुझे नहीं पता कि वहाँ क्या है, लेकिन शुक्र है कि वैरिएंट है। इसलिए मैंने सोचा कि मैं केवल वेरिएंट से पूछूंगा कि यह किस इंडेक्स पर है और फिर उस इंडेक्स का उपयोग std::get
उसकी सामग्री के लिए करें।
लेकिन यह संकलन नहीं है:
#include <variant>
int main()
{
std::variant<int, float, char> var { 42.0F };
const std::size_t idx = var.index();
auto res = std::get<idx>(var);
return 0;
}
त्रुटि std::get
कॉल में होती है:
error: no matching function for call to ‘get<idx>(std::variant<int, float, char>&)’
auto res = std::get<idx>(var);
^
In file included from /usr/include/c++/8/variant:37,
from main.cpp:1:
/usr/include/c++/8/utility:216:5: note: candidate: ‘template<long unsigned int _Int, class _Tp1, class _Tp2> constexpr typename std::tuple_element<_Int, std::pair<_Tp1, _Tp2> >::type& std::get(std::pair<_Tp1, _Tp2>&)’
get(std::pair<_Tp1, _Tp2>& __in) noexcept
^~~
/usr/include/c++/8/utility:216:5: note: template argument deduction/substitution failed:
main.cpp:9:31: error: the value of ‘idx’ is not usable in a constant expression
auto res = std::get<idx>(var);
^
main.cpp:7:15: note: ‘std::size_t idx’ is not const
std::size_t idx = var.index();
^~~
मैं इसे कैसे ठीक करूं?