Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

[Question]: Specialized template class parameter issue #91

Open
@harsszegi

Description

Hi,
I have the following class:

#include
#include

template<typename DataType, typename Variant1, typename Variant2, typename Variant3>
class Foo
{
public:
Foo(const std::shared_ptr & foo) : foo_{foo} {}
Foo(const std::variant<Variant1, Variant2, Variant3> & bar) : bar_{bar} {}
private:
std::shared_ptr foo_;
std::variant<Variant1, Variant2, Variant3> bar_;
};

using FooInt = Foo<int, double, char, long>;

Even when I check FooInt's attribute, I fail to see for example shared_ptr's template parameter being "resolved" to DataType, instead I get (I guess the STL default) "_Ty" when I check the constructor arguments.

If I do an -ast-dump with clang-15 for example, I can clearly see though that even the unspecialized template class
definition contains the proper arguments for shared_ptr (I don't even see _Ty there), e.g.:

| | |-CXXConstructorDecl 0x56434eb1f3a8 <line:8:3, col:59> col:3 Foo<DataType, Variant1, Variant2, Variant3> 'void (const std::shared_ptr &)' implicit-inline
| | | |-ParmVarDecl 0x56434eb1f270 <col:7, col:41> col:41 referenced foo 'const std::shared_ptr &'
| | | |-CXXCtorInitializer Field 0x56434eb1fa00 'foo_' 'std::shared_ptr':'shared_ptr'
| | | | -InitListExpr 0x56434eb1fcc8 <col:52, col:56> 'void' | | | | -DeclRefExpr 0x56434eb1fca8 col:53 'const std::shared_ptr':'const shared_ptr' lvalue ParmVar 0x56434eb1f270 'foo' 'const std::shared_ptr &'
| | | `-CompoundStmt 0x56434eb1fd38 <col:58, col:59>

How should I / could I figure out that "_Ty" is actually "DataType" (same goes for std::variant's template parameters).
Thanks,

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

        AltStyle によって変換されたページ (->オリジナル) /