В моем суматошном мнении и на основе §13.3.3 / 1 Наилучшая жизнеспособная функция [over.match.best] , оператор перегруженного преобразования без шаблона (т. е. operator int() const
) имеет более высокий приоритет в отношении выбора разрешения перегрузки, чем его шаблонный аналог (т. е. template <typename T> operator T () const
).
Таким образом, перегруженное разрешение правильно выбрало бы operator int() const
по сравнению с template <typename T> operator T () const
, поскольку является наилучшей жизнеспособной функцией.
Кроме того, поскольку версия без шаблона будет выбрана над шаблоном (т. е. шаблон не будет материализован / квалифицирован компилятором), class Var
будет иметь одну функцию преобразования, и, следовательно, требование в §6.4.2 / 2 Оператор switch [stmt.switch] для единственного интегрального преобразования будет выполнен.
Следовательно, Clang прав, а GCC ошибочен.
Что связано с использованием переменной окружения «GIT_INDEX_FILE», чтобы заставить git использовать другой файл индекса?
Итак, чтобы создать новый индексный файл из HEAD, используйте
GIT_INDEX_FILE=.git/other-index git reset
и после этого вы могли бы просто
GIT_INDEX_FILE=.git/other-index git status
искать изменения.
Недостатком этого, вы не увидите реального статуса, если основной индекс будет изменен добавлением / rm. Но, по крайней мере, это позволит вам обнаружить факт изменения, а затем, вероятно, сделать еще кое-что, чтобы узнать реальную разницу.
Не могли бы вы также описать больше цели, которую вы пытаетесь достичь? Вероятно, мы могли бы выступить с некоторыми другими решениями.
Другая идея. Попробуйте это:
cp .git/index .git/other-index # or maybe just "ln" once, rather than copying everytime?
GIT_INDEX_FILE=.git/other-index git status
Не знаете, насколько это достоверно ... если команда cp
будет выполняться во время выполнения git add/rm
, вы можете иметь «поврежденный» индексный файл и, по-видимому, получить неудача, но для вашего использования я считаю, что это достаточно хорошо - вы можете просто проигнорировать сбой и повторить попытку.
Быстрая и грязная, но наиболее безопасно вы можете просто использовать пользователя с разрешениями только для чтения.
sudo -u nobody git status
cp
. Пожалуйста, попробуйте сказать, хорошо ли это работает, мне любопытно. – kan 10 January 2015 в 22:15