Is there a convenient way to check if a string value is a type?
It's possible to have a list of built-in types to compare against, but that wouldn't work for user defined types.
std::string s = "std::vector<int>";
Is there a convenient way to check if a string value is a type?
It's possible to have a list of built-in types to compare against, but that wouldn't work for user defined types.
std::string s = "std::vector<int>";
 
    
    Internally, it is impossible to verify whether a string would be a type, simply because it is impossible to reflect on what types are defined in the program.
And externally, it is impossible to tell whether a given token sequence is a type in C++ without essentially having a complete C++ compiler/interpreter at hand. For example:
template<bool>
struct A {
    using X = int;
};
template<>
struct A<false> {
    constexpr static auto X = []{};
};
constexpr bool some_function() { /*...*/ }
int main() {
    A<some_function()>::X();
}
Whether A<some_function()>::X here is a type or an expression depends on whether or not some_function() evaluates to true or false at compile-time and the compile-time language is essentially Turing-complete (if there wasn't an implementation-defined limit on number of operations), requiring evaluating almost unrestricted C++ itself.
Even worse, the same is required to even parse C++ expressions, because the meaning of any given < token can also depend on arbitrary compile-time evaluation.
 
    
    If it's only your computer to run it, then prepare a header to include everything like this in GCC:
bits/stdc++.h
then construct a string like this (pseudo-code):
bool isThisType(std::string userType)
{
    std::string toCompile = R"(
         #include<bits/stdc++.h> 
         #include<listOfBuiltinTypes>
         int main(){ 
            @@yourString@@ var; 
            std::cout<<"size="<<sizeof(var); 
            return 0;  
         }
    )";
    replace(toCompile,"@@yourString@@",userType);
    auto fileName = commandLineWriteToFile(toCompile); // main.cpp
    auto errorString = commandLineCompileFile(fileName); // "error.."
    bool isType=!commandLineCheckErrorOutput(errorString);
    return isType;
}
...
bool tmp = isThisType("std::vector<int>");
otherwise you'd need to make a C++ compiler yourself.
