Шаблонный класс с конструктором, который принимает теневую ошибку T*C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Шаблонный класс с конструктором, который принимает теневую ошибку T*

Сообщение Anonymous »

Код:

Код: Выделить всё

template 
class MyClass final {
public:
static MyClass factoryMethod(TOwner* const a_owner) {
MyClass(a_owner); // Does not compile
//MyClass { a_owner }; // Compiles
}

private:
MyClass(TOwner* const a_owner) :
m_owner(a_owner)
{}

TOwner* m_owner;
};

int main() { return 0; }
Ошибка:

Код: Выделить всё

foo.cpp: In static member function 'static MyClass MyClass::factoryMethod(TOwner*)':
foo.cpp:5:17: error: declaration of 'MyClass a_owner' shadows a parameter
5 |         MyClass(a_owner); // Does not compile
|                 ^~~~~~~
foo.cpp:4:48: note: 'TOwner* const a_owner' previously declared here
4 |     static MyClass factoryMethod(TOwner* const a_owner) {
|                                  ~~~~~~~~~~~~~~^~~~~~~
Компиляция (GCC 10.2.1):

Код: Выделить всё

g++ foo.cpp --std=c++17
Я понимаю, что практическим решением будет использование синтаксиса, который я закомментировал, но я хочу знать, почему это считается ошибкой компилятора. Какой-то досадный разбор?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»