নিম্নলিখিত কোডটি জিসিসি এবং ঝনঝন (এবং আরও অনেক সি ++ 11 সংকলক) সহ সংকলন করে
#include <stdint.h>
typedef int datatype;
template <typename T>
struct to_datatype {};
template <>
struct to_datatype<int16_t> {
static constexpr datatype value = 1;
};
template <typename T>
class data {
public:
data(datatype dt = to_datatype<T>::value) {}
};
int main() {
data<char> d{to_datatype<int16_t>::value};
}
(প্রায়) সর্বশেষতম এমএসভিসির সাথে সংকলন করার সময়
> cl .\test.cpp /std:c++latest /permissive-
Microsoft (R) C/C++ Optimizing Compiler Version 19.24.28314 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
test.cpp
.\test.cpp(16): error C2039: 'value': is not a member of 'to_datatype<T>'
with
[
T=char
]
.\test.cpp(16): note: see declaration of 'to_datatype<T>'
with
[
T=char
]
.\test.cpp(20): note: see reference to class template instantiation 'data<char>' being compiled
এটি কি এমএসভিসির একটি বাগ? যদি হ্যাঁ, তবে সি ++ স্ট্যান্ডার্ডের কোন শব্দটি এটিকে সর্বোত্তমভাবে বর্ণনা করে?
আপনি যদি কোডটির কিছু অংশ দিয়ে প্রতিস্থাপন করেন
template <typename T>
class data {
public:
data(datatype dt) {}
data() : data(to_datatype<T>::value) {}
};
এটি যেভাবেই সহজেই সংকলন করে।
value
এমএসভিসির সাথে সামগ্রিক প্রকারে ব্যবহার করে একই ধরণের সমস্যায় চলেছে
std::is_same_v<char, int8_t>
। আমার অনুমানটি হ'ল এটি বাস্তবায়ন সংজ্ঞায়িত হয় যা অন্তর্নির্মিত 8 টি চরের সমান কিনা, তবে একটিতে ডকুমেন্টেশন চেক করা দরকার।