Существуют ли какие-либо ограничения на типы в операторе преобразования типов?

Мне было интересно, знает ли кто-нибудь, какие ограничения существуют для оператора преобразования / приведения типов?

Так, например, у меня могут быть следующие операторы переопределения:

class Test {
    operator int() { return 0; };
    operator int*() { return nullptr; };
}

Для обычной функции я мог бы также есть указатель на тип массива. Например.

int (*MyFunc())[4] { return nullptr; };

Однако я не знаю, как сделать то же самое для оператора преобразования (и если это вообще законно). Я пробовал несколько разных вариантов и VS2010, но ни один из них не работал. (Например:)

operator int (*())[4] { return nullptr; };
operator int(*)[4]() { return nullptr; };

Я не уверен, является ли это ограничением в VS2010 или существует общее ограничение на типы, которые могут использоваться в операторе преобразования. Я безуспешно пытался найти стандарт в сети. Кто-нибудь знает? Прежде чем кто-нибудь спросит: «Зачем вам это нужно?», Это касается автоматически сгенерированного кода. Хотя я не ожидаю получения указателя на ввод массива, я хотел бы иметь возможность создавать код, если он разрешен в C ++.

5
задан 5 February 2012 в 07:22
поделиться